【问题标题】:Can't set the default value of some fields in checkout page结账页面部分字段无法设置默认值
【发布时间】:2019-05-06 05:41:06
【问题描述】:

我想在我基于 woocommerce 的网站中默认将用户以前的数据放在结帐页面字段中。我无法为名字、姓氏和电话字段设置值,尽管我可以为其他字段设置值。我该如何解决这个问题?

【问题讨论】:

  • WooCommerce 将自动加载在结帐时输入的数据,用于开箱即用的先前订单。您具体指的是哪种“用户以前的数据”?
  • 你是对的。我已经为第一个订单输入了任意数据,而 woocommerce 总是将这些数据放在字段中,我无法以编程方式为它们设置不同的值。

标签: wordpress woocommerce checkout


【解决方案1】:

查看 WC_Checkout 类 (/includes/class-wc-checkout.php),它包含一个 get_value 方法,该方法负责表单中的默认方法。

此方法有一个过滤器woocommerce_checkout_get_value,您可以使用它来覆盖为每个字段加载的默认值。 下面是一个覆盖名字(计费和运输)和姓氏的示例:

add_filter('woocommerce_checkout_get_value', function( $value, $input ) {
    // first check if user is logged in
    if ( is_user_logged_in() ) {
        $current_user = wp_get_current_user();
        switch ($input) {
            case 'billing_first_name':
            case 'shipping_first_name':
                $value = 'Jack'; // fixed default
                break;
            case 'billing_last_name':
            case 'shipping_last_name':
                $value = $current_user->user_lastname; // use lastname from user profile
                break;

            default:
                // don't change if we don't have substituting data
                break;
        }
    }
    return $value;
},10 ,2 );

在同样的方法中,还有一个过滤器default_checkout_{form_field},可以让您首先检查现有值(前者是一种短路,会阻止正常默认值加载),例如:

add_filter('default_checkout_billing_first_name', 'woocommerce_override_default_checkout_values', 10, 2 );
add_filter('default_checkout_billing_last_name', 'woocommerce_override_default_checkout_values', 10, 2 );
add_filter('default_checkout_shipping_first_name', 'woocommerce_override_default_checkout_values', 10, 2 );
add_filter('default_checkout_shipping_last_name', 'woocommerce_override_default_checkout_values', 10, 2 );
function woocommerce_override_default_checkout_values( $value, $input ) {
    // first check if user is logged in
    if ( is_user_logged_in() ) {
        // only load if value is empty
        if (empty($value)) {
            // read your own
            $value = '...';
        }
    }
    return $value;
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-06-27
    • 2013-03-29
    • 1970-01-01
    • 2016-09-03
    • 1970-01-01
    相关资源
    最近更新 更多