无法设置结帐页面中某些字段的默认值

时间:2019-05-06 05:41:06

标签: wordpress woocommerce checkout

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

1 个答案:

答案 0 :(得分:0)

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