使用自定义值预先归档结帐后的代码

时间:2017-03-12 23:21:18

标签: php jquery wordpress woocommerce checkout

我一直在以前版本的WooCommerce中使用此自定义功能,以预先填写城市和邮政编码字段:

add_filter( 'woocommerce_checkout_fields' , 'custom_override_checkout_fields' );

function custom_override_checkout_fields( $fields ) {
     $fields['billing']['billing_city']['default'] = 'Beverly Hills';
     $fields['billing']['billing_postcode']['default'] = '90210';
     return $fields;
}

在新的WC更新之前,它一直很好用。

该城市仍有效,但默认的邮政编码字段似乎不再有用。它不会自动预先填充该值。

有什么变化吗?还有其他解决方法吗?

由于

2 个答案:

答案 0 :(得分:1)

为“后代码”字段设置值不再起作用,因为存在自动填充功能。即使禁用“自动完成”,这也不起作用。因此,解决方法是在这种情况下使用 jQuery

所以你的代码将是:

add_filter( 'woocommerce_checkout_fields' , 'custom_override_checkout_fields', 10, 1 );
function custom_override_checkout_fields( $fields ) {

    $fields['billing']['billing_city']['default'] = 'Beverly Hills';
    $fields['billing']['billing_postcode']['autocomplete'] = null; // Removing autocomplete

    return $fields;
}

add_action( 'woocommerce_after_checkout_form' , 'my_custom_checkout_field_postcode' );
function my_custom_checkout_field_postcode( ) {
    ?>
        <script>
            (function($){
                $('#billing_postcode').val('90210');
            })(jQuery);
        </script>
    <?php
}

这将在“代码后”结帐帐单字段中正确设置所需的值。

代码进入活动子主题(或主题)的function.php文件或任何插件文件中。

答案 1 :(得分:1)

当您使用为作业创建的woocommerce回调时,不必使用Java脚本:“ woocommerce_checkout_get_value”。

调用woocommerce_after_checkout_form来设置检出字段的属性,例如禁用自动完成功能。

要注意的一点是,将针对签出表单中的每个字段重复调用此函数。因此,您打开该字段并返回您希望分配给结帐表格的值:

根据您上面的代码。你去...

function populating_checkout_fields ($fields, $input) 
 {
  global $woocommerce;

  switch($input)
     {
     case 'billing_city':
        $FieldValue = 'Beverly Hills';
        return $FieldValue;
     break;
     }

return $fields;  // return the default value
 }
 add_filter( 'woocommerce_checkout_get_value', 'populating_checkout_fields', 10, 2 );   


 function ModifyAutoComplete($fields)
   {
   $fields['billing']['billing_postcode']['autocomplete'] = null;
   }
  add_filter( 'woocommerce_checkout_fields' , 'ModifyAutoComplete', 10, 1 );