2017-07-19 137 views
3

我试图重新排序结帐页面,但一切我都试过至今没有工作的计费领域:重新排序Woocommerce结账领域

这是目前我想摘录:

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; 
} 

是否可以重写此片段,因为它曾经为我工作?

回答

4

您使用不再有效(因为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; 
} 

我已经添加了额外的代码段的第一个代码块验证整个块。

+0

$ fields ['billing'] ['billing_first_name'] [ 'priority'] = 1; $ fields ['billing'] ['billing_last_name'] ['priority'] = 2; $ fields ['billing'] ['billing_country'] ['priority'] = 3; $ fields ['billing'] ['billing_state'] ['priority'] = 4; $ fields ['billing'] ['billing_address_1'] ['priority'] = 5; $ fields ['billing'] ['billing_address_2'] ['priority'] = 6; $ fields ['billing'] ['billing_phone'] ['priority'] = 7; $ fields ['billing'] ['billing_email'] ['priority'] = 8; - 这是显示字段按以下顺序,名字,最后,国家,电话,邮件,地址1,地址2,状态 –

+0

@YahyaHussein有可能是有另一个功能做同样的事情(无论是在你的主题文件,或另一个插件)。我的建议是将过滤器的优先级调整为像add_filter(“woocommerce_checkout_fields”,“custom_override_checkout_fields”,999);'以便它运行__after__任何潜在的重复功能。 – Frits

+0

似乎应该工作,但它不工作 –

3

要更改woocommerce结帐字段,还需要更改字段顺序和所需的类别显示。你可以在functions.php中添加下面的代码,它可以工作。

add_filter("woocommerce_checkout_fields", "woocommerce_reorder_checkout_fields", 9999); 

if (! function_exists('woocommerce_reorder_checkout_fields')) { 
    function woocommerce_reorder_checkout_fields($fields) { 

     /* To reorder state field you need to add this array. */ 
     $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; 

     /* To change email and phone number you have to add only class no need to add priority. */ 

     $fields['billing']['billing_email']['class'][0] = 'form-row-first'; 
     $fields['billing']['billing_phone']['class'][0] = 'form-row-last'; 

    return $fields; 
    } 
} 

见附表图像enter image description here 欲了解更多信息请检查该link

+0

他们固定使用类和优先级的问题是造型!不订购! –

+0

是的,使用优先级,你可以改变显示顺序,所以我更新我的答案 –

+0

没有为我工作 –

0

排序(排序)在address-i18n.min.js上工作,而不是在php代码中。

enter image description here

就我而言,我做错了什么事在我的js代码。所以,排序不好(JavaScript停在那里)。

请检查dev控制台和js错误。

而这是只改变优先级的php代码。

function rpf_edit_default_address_fields($fields) { 

    /* ------ reordering ------ */ 
    $fields['country']['priority'] = 10; 
    $fields['first_name']['priority'] = 20; 
    $fields['last_name']['priority'] = 30; 
    $fields['address_1']['priority'] = 40; 
    $fields['address_2']['priority'] = 50; 
    $fields['city']['priority'] = 60; 
    $fields['state']['priority'] = 70; 
    $fields['postcode']['priority'] = 80; 

    return $fields; 
} 
add_filter('woocommerce_default_address_fields', 'rpf_edit_default_address_fields', 100, 1); 

祝你好运!