在 WooCommerce 自定义结帐字段上设置特定的显示顺序

我正在向 woocommerce 结帐计费部分页面添加 20 个自定义结帐字段。它以前工作正常。但是最近我们发现字段的显示顺序已经混乱了。我希望有人可以帮助我按照添加的顺序显示自定义字段。


我已禁用除 woocommerce 之外的所有插件。我使用的是二十九主题。我删除了所有自定义字段,然后一次添加一个。奇怪的是,我能够添加按顺序显示的 11 个字段。当我们添加 12 个或更多字段时,显示混乱。我用一个简单测试字段的多个副本替换了所有定制的自定义字段,但问题仍然存在。


以下代码已添加到主题 functions.php


add_filter( 'woocommerce_checkout_fields' , 

'custom_override_checkout_fields',10,3 ); 


function custom_override_checkout_fields( $fields ) {


//unset the unwanted billing fields


unset($fields['order']['order_comments']);

unset($fields['billing']['billing_company']);

unset($fields['billing']['billing_address_1']);

unset($fields['billing']['billing_address_2']);

unset($fields['billing']['billing_city']);

unset($fields['billing']['billing_postcode']);

unset($fields['billing']['billing_state']);

unset($fields['billing']['billing_phone']);


//add custom fields


$fields['billing']['billing_test1'] = array(

    'label'       => __('test1', 'woocommerce'),

    'placeholder' => _x('', 'placeholder', 'woocommerce'),

    'required'    => true,

    'clear'       => true,

    'class'     => array('form-row'),

    );


$fields['billing']['billing_test2'] = array(

    'label'       => __('test2', 'woocommerce'),

    'placeholder' => _x('', 'placeholder', 'woocommerce'),

    'required'    => true,

    'clear'       => true,

    'class'     => array('form-row'),

    );


//a further 18 copies of the above field test3->test20


 return $fields;


}

布局应该是:-


First name    Last name

Email address

test1

test2 

test3

....

test20

实际布局是:-


First name

test10

test19

test18

test17

test16

test15

test14

test13

test12

test11

Last name

test9

test8

test7

test6

test5

test4

test3

test2

test1


千万里不及你
浏览 168回答 1
1回答

郎朗坤

您错过了priority允许重新排序表单字段的表单字段“ ”参数……在下面的代码中,我使用for循环动态生成 20 字段(仅用于测试,因为它是最快的)。在这里,这些表单字段的优先级从第一个的 200 开始,每个字段增加 10。代码:add_filter( 'woocommerce_checkout_fields', 'customizing_checkout_fields', 10, 1 );function customizing_checkout_fields( $fields ) {&nbsp; &nbsp; ## 1. unset the unwanted billing fields&nbsp; &nbsp; unset($fields['order']['order_comments']);&nbsp; &nbsp; unset($fields['billing']['billing_company']);&nbsp; &nbsp; unset($fields['billing']['billing_address_1']);&nbsp; &nbsp; unset($fields['billing']['billing_address_2']);&nbsp; &nbsp; unset($fields['billing']['billing_city']);&nbsp; &nbsp; unset($fields['billing']['billing_postcode']);&nbsp; &nbsp; unset($fields['billing']['billing_state']);&nbsp; &nbsp; unset($fields['billing']['billing_phone']);&nbsp; &nbsp; ## 2. Add 20 form fields (from "Test 1" to "Test 20")&nbsp; &nbsp; // Using a for loop to make the 20 fields dynamically&nbsp; &nbsp; for ( $i = 1, $j = 0; $i <= 20; $i++, $j += 10 ) {&nbsp; &nbsp; &nbsp; &nbsp; $fields['billing']['billing_test' . $i] = array(&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 'label'&nbsp; &nbsp; &nbsp; &nbsp;=> __('Test', 'woocommerce') . ' ' . $i,&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 'placeholder' => _x('', 'placeholder', 'woocommerce'),&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 'required'&nbsp; &nbsp; => true,&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 'clear'&nbsp; &nbsp; &nbsp; &nbsp;=> true,&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 'class'&nbsp; &nbsp; &nbsp; &nbsp;=> array('form-row'),&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 'priority'&nbsp; &nbsp; => (200 + $j) // <== The priority starting at 200 and increasing by 10 each time&nbsp; &nbsp; &nbsp; &nbsp; );&nbsp; &nbsp; }&nbsp; &nbsp; return $fields;}代码位于您的活动子主题(或活动主题)的 function.php 文件中。测试和工作。因此,在您的情况下,您将使用(没有 for 循环):add_filter( 'woocommerce_checkout_fields', 'customizing_checkout_fields', 10, 1 );function customizing_checkout_fields( $fields ) {&nbsp; &nbsp; ## 1. unset the unwanted billing fields&nbsp; &nbsp; unset($fields['order']['order_comments']);&nbsp; &nbsp; unset($fields['billing']['billing_company']);&nbsp; &nbsp; unset($fields['billing']['billing_address_1']);&nbsp; &nbsp; unset($fields['billing']['billing_address_2']);&nbsp; &nbsp; unset($fields['billing']['billing_city']);&nbsp; &nbsp; unset($fields['billing']['billing_postcode']);&nbsp; &nbsp; unset($fields['billing']['billing_state']);&nbsp; &nbsp; unset($fields['billing']['billing_phone']);&nbsp; &nbsp; ## 2. Add 20 form fields (from "Test 1" to "Test 20")&nbsp; &nbsp; $fields['billing']['billing_test1'] = array(&nbsp; &nbsp; &nbsp; &nbsp; 'label'&nbsp; &nbsp; &nbsp; &nbsp;=> __('Test 1', 'woocommerce'),&nbsp; &nbsp; &nbsp; &nbsp; 'placeholder' => _x('', 'placeholder', 'woocommerce'),&nbsp; &nbsp; &nbsp; &nbsp; 'required'&nbsp; &nbsp; => true,&nbsp; &nbsp; &nbsp; &nbsp; 'clear'&nbsp; &nbsp; &nbsp; &nbsp;=> true,&nbsp; &nbsp; &nbsp; &nbsp; 'class'&nbsp; &nbsp; &nbsp; &nbsp;=> array('form-row'),&nbsp; &nbsp; &nbsp; &nbsp; 'priority'&nbsp; &nbsp; => 200 // <== <== <== priority&nbsp; &nbsp; );&nbsp; &nbsp; $fields['billing']['billing_test2'] = array(&nbsp; &nbsp; &nbsp; &nbsp; 'label'&nbsp; &nbsp; &nbsp; &nbsp;=> __('Test 2', 'woocommerce'),&nbsp; &nbsp; &nbsp; &nbsp; 'placeholder' => _x('', 'placeholder', 'woocommerce'),&nbsp; &nbsp; &nbsp; &nbsp; 'required'&nbsp; &nbsp; => true,&nbsp; &nbsp; &nbsp; &nbsp; 'clear'&nbsp; &nbsp; &nbsp; &nbsp;=> true,&nbsp; &nbsp; &nbsp; &nbsp; 'class'&nbsp; &nbsp; &nbsp; &nbsp;=> array('form-row'),&nbsp; &nbsp; &nbsp; &nbsp; 'priority'&nbsp; &nbsp; => 210 // <== Increased by 10&nbsp; &nbsp; );&nbsp; &nbsp; // A further 18 copies of the above field from "Test 3" to "Test 20"&nbsp; &nbsp; return $fields;}
打开App,查看更多内容
随时随地看视频慕课网APP