首页 文章

预先填写woocommerce结帐中的结算字段[重复]

提问于
浏览
1

这个问题在这里已有答案:

在我的项目中,我正在使用woocommerce的直接结账插件,以便在一个页面上安装购物车和结账 .

客户希望订单流程如此

  • 我们在wordpress中有一个订单页面,用户输入他们的姓名,地址,电话,电子邮件,选择价格,然后重定向到直接结帐 .

  • 在结帐页面上,我们希望字段billing_name,billing_address等已经预先填写了订单页面中的数据 .

所以问题是如何将数据传递给结账?

另一个如何在填写传递数据之前清除这些字段?

2 回答

  • 2

    我刚刚在我正在建设的网站上遇到过同样的问题 . 我们在调查中收集电子邮件地址,如果用户继续结帐,我们希望预先填写电子邮件字段 . 当调查表单提交时,我将电子邮件地址存储在WooCommerce会话中,如下所示:

    $woocommerce->session->set('survey_email', $_POST['survey_email']);
    

    然后,我挂钩 woocommerce_checkout_fields 过滤器(see docs)填写表单字段 . 您无法直接设置字段的值,但您可以设置默认值,然后在用户登录时可以覆盖该优先级 .

    function override_checkout_email_field( $fields ) {
        global $woocommerce;
        $survey_email = $woocommerce->session->get('survey_email');
        if(!is_null($survey_email)) {
          $fields['billing']['billing_email']['default'] = $survey_email;
        }
        return $fields;
    }
    
    add_filter( 'woocommerce_checkout_fields' , 'override_checkout_email_field' );
    
  • 0

    这个解决方案帮助了我 - https://www.bobz.co/pre-populate-woocommerce-checkout-fields/

    <?php
    /**
     * Pre-populate Woocommerce checkout fields
     */
    add_filter('woocommerce_checkout_get_value', function($input, $key ) {
        global $current_user;
        switch ($key) :
            case 'billing_first_name':
            case 'shipping_first_name':
                return $current_user->first_name;
            break;
    
            case 'billing_last_name':
            case 'shipping_last_name':
                return $current_user->last_name;
            break;
            case 'billing_email':
                return $current_user->user_email;
            break;
            case 'billing_phone':
                return $current_user->phone;
            break;
        endswitch;
    }, 10, 2);
    

相关问题