wordpress - 重新排序 Woocommerce 结帐字段

标签 wordpress woocommerce hook

我正在尝试对结帐页面上的计费字段重新排序,但到目前为止我尝试的一切都不起作用。

这是我目前正在尝试的片段:

add_filter("woocommerce_checkout_fields", "order_fields");

function order_fields($fields) {
  $order = array(
    "billing_first_name", 
    "billing_last_name", 
    "billing_country", 
    "billing_state", 
    "billing_address_1", 
    "billing_address_2", 
    "billing_email", 
    "billing_phone"
  );

  foreach($order as $field) {
    $ordered_fields[$field] = $fields["billing"][$field];
  }

  $fields["billing"] = $ordered_fields;
  return $fields;
}

可能有什么东西会覆盖这个片段,因为它曾经对我有用。

最佳答案

您使用的方法不再有效(自 WooCommerce 3.0.4 更新 - link to github issue here 以来)。这不完全是一个错误,而是规范的变化。

要解决此问题,您只需调整每个字段的优先级以适应您想要的顺序。

add_filter("woocommerce_checkout_fields", "custom_override_checkout_fields", 1);
function custom_override_checkout_fields($fields) {
    $fields['billing']['billing_first_name']['priority'] = 1;
    $fields['billing']['billing_last_name']['priority'] = 2;
    $fields['billing']['billing_company']['priority'] = 3;
    $fields['billing']['billing_country']['priority'] = 4;
    $fields['billing']['billing_state']['priority'] = 5;
    $fields['billing']['billing_address_1']['priority'] = 6;
    $fields['billing']['billing_address_2']['priority'] = 7;
    $fields['billing']['billing_city']['priority'] = 8;
    $fields['billing']['billing_postcode']['priority'] = 9;
    $fields['billing']['billing_email']['priority'] = 10;
    $fields['billing']['billing_phone']['priority'] = 11;
    return $fields;
}

add_filter( 'woocommerce_default_address_fields', 'custom_override_default_locale_fields' );
function custom_override_default_locale_fields( $fields ) {
    $fields['state']['priority'] = 5;
    $fields['address_1']['priority'] = 6;
    $fields['address_2']['priority'] = 7;
    return $fields;
}

请注意,不是代码中的行调整顺序中的位置,而是分配给该字段的优先级。在这种情况下,我更改了 ['billing_state']优先于 5['billing_country'] 之后(在此示例中)及之前 ['billing_address_1'] .

编辑:

根据评论,由于某种原因这不起作用(它在我的第一次测试 WooCommerce 安装中起作用,但在更改商店位置后我设法让它失败)。

经过一番挖掘,我发现默认的语言环境设置被应用在覆盖之上(不知道如何解释这一点,但请耐心等待)。

我设法在上述代码不起作用的情况下运行安装,并设法通过添加以下代码来修复它:
add_filter( 'woocommerce_default_address_fields', 'custom_override_default_locale_fields' );
function custom_override_default_locale_fields( $fields ) {
    $fields['state']['priority'] = 5;
    $fields['address_1']['priority'] = 6;
    $fields['address_2']['priority'] = 7;
    return $fields;
}

我已将额外的代码段添加到第一个代码块以验证整个 block 。

关于wordpress - 重新排序 Woocommerce 结帐字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45200360/

相关文章:

php - 在特定产品 ID 上添加自定义字段 woocommerce

c++ - 当钩子(Hook)启动一个新线程时取消 Hook 一个钩子(Hook)进程

php - WordPress 作者链接

css 元素在 chrome 和 IE9 中不显示

javascript - 使用 jQuery 删除动态加载的内容

php - Woocommerce php 代码 get_price_html()

css - Woocommerce 产品页面空白?

Wordpress wp-admin/setup-config.php 主页重定向循环

c++ - Windows:如何查询低级键盘 Hook 中修改键的状态?

java - 如何在java中使用SetWindowsHookEx函数?