为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

PHP
千万里不及你 2022-01-08 17:43:15
我正在向 woocommerce 结帐计费部分页面添加 20 个自定义结帐字段。它以前工作正常。但是最近我们发现字段的显示顺序已经混乱了。我希望有人可以帮助我按照添加的顺序显示自定义字段。我已禁用除 woocommerce 之外的所有插件。我使用的是二十九主题。我删除了所有自定义字段,然后一次添加一个。奇怪的是,我能够添加按顺序显示的 11 个字段。当我们添加 12 个或更多字段时,显示混乱。我用一个简单测试字段的多个副本替换了所有定制的自定义字段,但问题仍然存在。以下代码已添加到主题 functions.phpadd_filter( 'woocommerce_checkout_fields' , 'custom_override_checkout_fields',10,3 ); function custom_override_checkout_fields( $fields ) {//unset the unwanted billing fieldsunset($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 nameEmail addresstest1test2 test3....test20实际布局是:-First nametest10test19test18test17test16test15test14test13test12test11Last nametest9test8test7test6test5test4test3test2test1
查看完整描述

1 回答

?
郎朗坤

TA贡献1921条经验 获得超9个赞

您错过了priority允许重新排序表单字段的表单字段“ ”参数……在下面的代码中,我使用for循环动态生成 20 字段(仅用于测试,因为它是最快的)。


在这里,这些表单字段的优先级从第一个的 200 开始,每个字段增加 10。


代码:


add_filter( 'woocommerce_checkout_fields', 'customizing_checkout_fields', 10, 1 );

function customizing_checkout_fields( $fields ) {


    ## 1. 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']);


    ## 2. Add 20 form fields (from "Test 1" to "Test 20")


    // Using a for loop to make the 20 fields dynamically

    for ( $i = 1, $j = 0; $i <= 20; $i++, $j += 10 ) {


        $fields['billing']['billing_test' . $i] = array(

            'label'       => __('Test', 'woocommerce') . ' ' . $i,

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

            'required'    => true,

            'clear'       => true,

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

            'priority'    => (200 + $j) // <== The priority starting at 200 and increasing by 10 each time

        );

    }


    return $fields;

}

代码位于您的活动子主题(或活动主题)的 function.php 文件中。测试和工作。


因此,在您的情况下,您将使用(没有 for 循环):


add_filter( 'woocommerce_checkout_fields', 'customizing_checkout_fields', 10, 1 );

function customizing_checkout_fields( $fields ) {


    ## 1. 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']);


    ## 2. Add 20 form fields (from "Test 1" to "Test 20")


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

        'label'       => __('Test 1', 'woocommerce'),

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

        'required'    => true,

        'clear'       => true,

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

        'priority'    => 200 // <== <== <== priority

    );


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

        'label'       => __('Test 2', 'woocommerce'),

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

        'required'    => true,

        'clear'       => true,

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

        'priority'    => 210 // <== Increased by 10

    );


    // A further 18 copies of the above field from "Test 3" to "Test 20"


    return $fields;

}


查看完整回答
反对 回复 2022-01-08
  • 1 回答
  • 0 关注
  • 166 浏览

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号