开发者社区 问答 正文

在结帐页面上更改计费字段的顺序

我正在使用WC过滤器来订购帐单字段

筛选器似乎工作正常,但由于未知原因,它会即时恢复为默认顺序。

add_filter("woocommerce_checkout_fields", "custom_order_fields");

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

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

    $fields["billing"] = $ordered_fields;

    $fields['billing_first_name']['priority'] = 10;
    $fields['billing_last_name']['priority'] = 20;
    $fields['billing_country']['priority'] = 30;
    $fields['billing_address_1']['priority'] = 40;
    $fields['billing_address_2']['priority'] = 50;
    $fields['billing_state']['priority'] = 40;
    $fields['billing_city']['priority'] = 70;
    $fields['billing_phone']['priority'] = 80;
    $fields['billing_email']['priority'] = 90;

    return $fields;
}

展开
收起
几许相思几点泪 2019-12-23 17:51:51 660 分享 版权
阿里云 AI 助理回答

你的代码逻辑看起来是正确的,你尝试通过woocommerce_checkout_fields过滤器来重新排序结账页面的账单字段。不过,这里存在一个潜在的问题,可能是导致你的排序没有生效的原因:

  1. 优先级设置重复:在你的代码中,billing_statebilling_address_1被赋予了相同的优先级(40)。这可能会导致这两个字段的排序行为不符合预期。你应该为每个字段分配唯一的优先级值。

修正后的代码示例:

add_filter("woocommerce_checkout_fields", "custom_order_fields");

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

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

    $fields["billing"] = $ordered_fields;

    // 确保每个字段都有唯一的优先级
    $fields['billing_first_name']['priority'] = 10;
    $fields['billing_last_name']['priority'] = 20;
    $fields['billing_country']['priority'] = 30;
    $fields['billing_address_1']['priority'] = 40; // 原本与billing_state相同,已调整
    $fields['billing_address_2']['priority'] = 50;
    $fields['billing_state']['priority'] = 60; // 修改以确保唯一性
    $fields['billing_city']['priority'] = 70;
    $fields['billing_phone']['priority'] = 80;
    $fields['billing_email']['priority'] = 90;

    return $fields;
}

请尝试上述修改后的代码,并检查是否解决了即时恢复为默认顺序的问题。如果问题依旧,请考虑是否有其他插件或主题功能可能也在修改这些字段的排序,或者检查WordPress/WooCommerce是否有更新需要安装,有时更新可以解决此类兼容性问题。

有帮助
无帮助
AI 助理回答生成答案可能存在不准确,仅供参考
0 条回答
写回答
取消 提交回答
问答地址: