【问题标题】:WooCommerce drop-down postcode / Zip with (space) or ( _ ) or ( - )?WooCommerce 下拉邮政编码/带有(空格)或(_)或(-)的邮政编码?
【发布时间】:2020-07-26 19:53:56
【问题描述】:

我正在建立我的网站。我安装了 WooCommerce 插件,并且我居住的国家/地区没有邮政编码或邮政编码。所以要计算我使用地区的运费。我在(计算运费)区域和结帐页面的购物车页面中将所有地区添加为下拉菜单。在结帐页面的代码下方

function custom_override_default_postcode_field( $address_fields ) {
    // Your postcodes array
    $postcode_array = array(
        'ALMOHAMMDIAH' => "ALMOHAMMDIAH",
        'ALNAEEM' => "ALNAEEM",
        'ALZAHRRA' => "ALZAHRRA"
    );
    $address_fields['postcode']['type'] = 'select';
    $address_fields['postcode']['options'] = $postcode_array;

    return $address_fields;
}

并在下面的(计算运费)区号中添加购物车页面中的地区

'woocommerce_shipping_calculator_enable_postcode', true ) ) : ?>
            <p class="form-row form-row-wide" id="calc_shipping_postcode_field">

                <?php
                // HERE <===== define your array of cities
                $postcodes = array('ALMOHAMMDIAH','ALNAEEM','ALZAHRRA');

                $current_postcode = esc_attr( WC()->customer->get_shipping_postcode() );
                ?>
            <select name="calc_shipping_postcode" id="calc_shipping_postcode">
                <option value=""><?php _e( 'Select a District&hellip;', 'woocommerce' ); ?></option>
                <?php foreach( $postcodes as $postcode ):
                echo '<option value="'.$postcode.'" '.selected( $current_postcode, $postcode ).'>'.$postcode.'</option>';
                endforeach; ?>
            </select>
            </p>

然后我将邮政编码/邮政编码更改为下面这个核心的地区

function my_text_strings( $translated_text, $text, $domain ) {
    switch ( $translated_text ) {
        case 'Postcode / ZIP' :
            $translated_text = __( 'District', 'woocommerce' );
            break;
    }
    return $translated_text;
}
add_filter( 'gettext', 'my_text_strings', 20, 3 );

上面的所有代码都是我在网上找到的,改了一些文字,就可以正常工作了。

现在的问题是 WooCommerce 后端的邮政编码迫使我使用全部大写。有些地区必须有空间,我需要这样做,但我想不通。如何使后端的邮政编码接受空格或至少 - 或 _ ?

喜欢(AL MOHAMMDIAH 或 AL-MOHAMMDIAH)而不是(ALMOHAMMDIAH)

顺便说一句,上面的代码我限制了所有地区,因此计算有效。如果我添加了空格,_ 或 - 它会崩溃并且什么都没有显示。

【问题讨论】:

    标签: php wordpress woocommerce


    【解决方案1】:

    没有简单的解决方法。它需要编辑核心文件,如果可能的话,永远不要这样做。所有邮政编码数据都通过'cleaning' process 发送,这会在正常使用情况下删除所有不需要的数据(也设为大写)。没有过滤器可以阻止它。

    现在来一个解决方案。没有简单的解决方案。最好的方法是制作一个小插件,它会添加字段区并删除邮政编码,但仅限于您的国家。然后应用运输逻辑来获取价格等。另一种方法是忽略空格并没有它们,或者用其他东西替换地区名称。

    【讨论】:

    • 有没有推荐的插件可以添加字段和应用运输逻辑?
    【解决方案2】:

    为了完成这项工作,我将州/国家/地区字段更改为地区并隐藏邮政编码。到目前为止,它运行良好,唯一的缺点是地区名称以城市命名。我想这在我居住的国家没什么大不了的

    /*  district added as state/Country for shipping purposes */
    add_filter('woocommerce_states', 'add_custom_states_to_country');
    add_filter('woocommerce_countries_allowed_country_states', 'add_custom_states_to_country');
    function add_custom_states_to_country( $states ) {
        $states['SA'] = array(
            'JOR' => __('Abruq-Ar-Rughamah', 'woocommerce'),
            'JAL' => __('Al-Adel', 'woocommerce'),
            'JAJ' => __('Al-Ajaweed', 'woocommerce'),
            'JAD' => __('Al-Ajwad', 'woocommerce'),
            'JAW' => __('Al-Amwaj', 'woocommerce'),
            'JAS' => __('Al-Andalus', 'woocommerce'),
            'JAH' => __('Al-Asalah', 'woocommerce'),
            'JZZ' => __('Al-Aziziyah', 'woocommerce'),
            'JBH' => __('Al-Baghdadiyah', 'woocommerce'),
    );
          return $states;
    }
    

    并将文本更改为地区

    add_filter( 'woocommerce_default_address_fields' , 'bbloomer_override_postcode_validation' );
     
    function bbloomer_override_postcode_validation( $address_fields ) {
    
        unset($address_fields['company']);  /* remove company */
        unset($address_fields['postcode']); /* remove zip */
        /*$address_fields['postcode']['required'] = false;*/ /* postcode req */
        $address_fields['state']['required'] = true; /* state required */
        $address_fields['state']['label'] = __('District'); /* state name to dist */
        
        return $address_fields;
    }
    

    我希望这对某个地方的人有用。

    【讨论】:

      猜你喜欢
      • 2015-01-22
      • 1970-01-01
      • 1970-01-01
      • 2011-04-11
      • 2013-04-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多