php Woocommerce覆盖航运城市选择字段

zvokhttg  于 2023-01-16  发布在  PHP
关注(0)|答案(2)|浏览(101)

我们正在尝试使用docs.woothemes上记录的方法修改默认的Woocommerce结帐发货城市字段,但遇到了一个问题。
我们用select下拉菜单替换了shipping_city文本字段。
在页面加载时,select下拉菜单将替换为默认文本字段,如果可用,将自动填充用户之前的交付目的地。
但是,如果重新加载/刷新页面,则文本字段将替换为新的、非常需要的select下拉菜单。
我们已经使用几个WordPress的add_filter函数过滤了这个字段,并将priority上下更改(-999至999)。
我们已经在我们的发货方法Class内部和外部运行了filter
我们甚至禁用了浏览器自动表单完成,因为我们...好了,没有其他的想法了...
select字段工作时...它工作得很好。运费得到更新,数据得到返回,存储和电子邮件发送。
使用的filters为:
add_filter( 'woocommerce_checkout_fields', array( $this, 'fn_name' ) );
x1米11米1x
$field数组看起来像这样:

$fields[ 'shipping' ][ 'shipping_city' ] = array(
                    'label' => __( 'Suburb/City', 'woocommerce' ),
                    'required' => FALSE,
                    'clear' => TRUE,
                    'type' => 'select',
                    'options' => $options_array,
                    'class' => array( 'update_totals_on_change' )
                );

                return $fields;

奇怪的是,当我们在同一个区域运行两个过滤器时;sendond的标签被第一个覆盖了......想想看......哎呀,我希望我知道 AJAX ......我想是Ajax,但如果我知道AJAX,我就知道它是不是Ajax......
WordPress版本4.5.2和WooCommerce版本2.5.5

关于最终接受解决方案的附录:

由@LoicTheAztec建议和提供的代码运行得非常好,并且已经包含在我们的实现中。
然而,这个问题是由我们最初在Shipping_class_init中挂钩的Shipping Method类中包含的$field过滤器引起的
为了纠正这个问题,我们将新的woocommerce_form_field_args过滤器移到了一个单独的文件中,并在新的送货方式类发挥作用后检索我们的选项数组。

g6ll5ycj

g6ll5ycj1#

这应该与woocommerce_form_field_args挂钩一起使用,如下所示:

add_filter( 'woocommerce_form_field_args', 'custom_form_field_args', 10, 3 );
function custom_form_field_args( $args, $key, $value ) { 
    if ( $args['id'] == 'billing_city' ) {
     $args = array(
            'label' => __( 'Suburb/City', 'woocommerce' ),
            'required' => FALSE,
            'clear' => TRUE,
            'type' => 'select',
            'options' => $options_array,
            'class' => array( 'update_totals_on_change' )
        );
    } // elseif … and go on 

    return $args;
};

以下是默认的$args参数值:

$defaults = array(
    'type'              => 'text',
    'label'             => '',
    'description'       => '',
    'placeholder'       => '',
    'maxlength'         => false,
    'required'          => false,
    'autocomplete'      => false,
    'id'                => $key,
    'class'             => array(),
    'label_class'       => array(),
    'input_class'       => array(),
    'return'            => false,
    'options'           => array(),
    'custom_attributes' => array(),
    'validate'          => array(),
    'default'           => '',
);

参考文献:

  • 自定义帐单/发货表单中的占位符
  • 添加自定义css类到WooCommerce结帐字段
f4t66c6m

f4t66c6m2#

把这段代码放到你的子主题function.php中就可以了

$city_args = wp_parse_args( array(
    'type' => 'select',
    'options' => array(
        'city1' => 'Amsterdam',
        'city2' => 'Rotterdam',
        'city3'  => 'Den Haag', 
    ),
), $fields['shipping']['shipping_city'] );

$fields['shipping']['shipping_city'] = $city_args;
$fields['billing']['billing_city'] = $city_args; // Also change for billing field

return $fields;

}
add_filter( 'woocommerce_checkout_fields', 'jeroen_sormani_change_city_to_dropdown' );

相关问题