Php 使用会话中保存的Url变量预填充电子商务签出字段

Php 使用会话中保存的Url变量预填充电子商务签出字段,php,wordpress,woocommerce,get,checkout,Php,Wordpress,Woocommerce,Get,Checkout,当人们进入my woocommerce商店时,会在销售电子邮件中添加一个链接,并将电子邮件和姓名作为参数,我希望在结帐页面中预先填充姓名和电子邮件 因此,我创建了一个操作和过滤器。这与预期一样有效,但仅当我在销售页面ctrl+f5上进行硬刷新时 我已经从缓存和清漆缓存中排除了销售页面和结帐页面,但这并没有解决问题 我是不是遗漏了什么?你知道为什么这只适用于硬刷新吗 非常感谢您的帮助 代码: 在下面,您将找到正确的工作代码,将URL中的用户数据保存到WooCommerce会话中,并使用该数据自动填

当人们进入my woocommerce商店时,会在销售电子邮件中添加一个链接,并将电子邮件和姓名作为参数,我希望在结帐页面中预先填充姓名和电子邮件

因此,我创建了一个操作和过滤器。这与预期一样有效,但仅当我在销售页面ctrl+f5上进行硬刷新时

我已经从缓存和清漆缓存中排除了销售页面和结帐页面,但这并没有解决问题

我是不是遗漏了什么?你知道为什么这只适用于硬刷新吗

非常感谢您的帮助

代码:


在下面,您将找到正确的工作代码,将URL中的用户数据保存到WooCommerce会话中,并使用该数据自动填充相关的签出字段

URL将类似于:http://example.com/sales-page/?tu_em=name@example.com&tu_name=firstname

这可以从任何URL完成,因为设置URL变量时,代码将检测URL变量

守则

// Save user data from URL to Woocommerce session
add_action( 'template_redirect', 'set_custom_data_wc_session' );
function set_custom_data_wc_session () {
    if ( isset( $_GET['tu_em'] ) || isset( $_GET['tu_name'] ) ) {
        $em   = isset( $_GET['tu_em'] )   ? esc_attr( $_GET['tu_em'] )   : '';
        $name = isset( $_GET['tu_name'] ) ? esc_attr( $_GET['tu_name'] ) : '';

        // Set the session data
        WC()->session->set( 'custom_data', array( 'email' => $em, 'name' => $name ) );
    }
}

// Autofill checkout fields from user data saved in Woocommerce session
add_filter( 'woocommerce_billing_fields' , 'prefill_billing_fields' );
function prefill_billing_fields ( $address_fields ) {
    // Get the session data
    $data = WC()->session->get('custom_data');

    // Email
    if( isset($data['email']) && ! empty($data['email']) )
        $address_fields['billing_email']['default'] = $data['email'];

    // Name
    if( isset($data['name']) && ! empty($data['name']) )
        $address_fields['billing_first_name']['default'] = $data['name'];

    return $address_fields;
}

代码进入活动子主题或活动主题的function.php文件。已测试并正常工作。

在下面,您将找到正确的工作代码,用于将URL中的用户数据保存到WooCommerce会话中,并使用该数据自动填充相关的签出字段

URL将类似于:http://example.com/sales-page/?tu_em=name@example.com&tu_name=firstname

这可以从任何URL完成,因为设置URL变量时,代码将检测URL变量

守则

// Save user data from URL to Woocommerce session
add_action( 'template_redirect', 'set_custom_data_wc_session' );
function set_custom_data_wc_session () {
    if ( isset( $_GET['tu_em'] ) || isset( $_GET['tu_name'] ) ) {
        $em   = isset( $_GET['tu_em'] )   ? esc_attr( $_GET['tu_em'] )   : '';
        $name = isset( $_GET['tu_name'] ) ? esc_attr( $_GET['tu_name'] ) : '';

        // Set the session data
        WC()->session->set( 'custom_data', array( 'email' => $em, 'name' => $name ) );
    }
}

// Autofill checkout fields from user data saved in Woocommerce session
add_filter( 'woocommerce_billing_fields' , 'prefill_billing_fields' );
function prefill_billing_fields ( $address_fields ) {
    // Get the session data
    $data = WC()->session->get('custom_data');

    // Email
    if( isset($data['email']) && ! empty($data['email']) )
        $address_fields['billing_email']['default'] = $data['email'];

    // Name
    if( isset($data['name']) && ! empty($data['name']) )
        $address_fields['billing_first_name']['default'] = $data['name'];

    return $address_fields;
}

代码进入活动子主题或活动主题的function.php文件。已测试并正常工作。

装运信息发送到另一个地址默认为“自动”,我们将其用于自动填写账单

add_filter( 'woocommerce_checkout_fields' , 'ahmadyani_checkout_field_defaults', 20 );
function ahmadyani_checkout_field_defaults( $fields ) {
    $user = get_user_meta(get_current_user_id());
    $first_name = $user ? $user['shipping_first_name'][0] : '';
    $last_name = $user ? $user['shipping_last_name'][0] : '';
    $company = $user ? $user['shipping_company'][0] : '';
    $shipping_address_1 = $user ? $user['shipping_address_1'][0] : '';
    $shipping_address_2 = $user ? $user['shipping_address_2'][0] : '';
    $shipping_city = $user ? $user['shipping_city'][0] : '';
    $shipping_state = $user ? $user['shipping_state'][0] : '';
    $shipping_postcode = $user ? $user['shipping_postcode'][0] : '';
    $fields['billing']['billing_first_name']['default'] = $first_name;
    $fields['billing']['billing_last_name']['default'] = $last_name;
    $fields['billing']['billing_company']['default'] = $company;
    $fields['billing']['billing_address_1']['default'] = $shipping_address_1;
    $fields['billing']['billing_address_2']['default'] = $shipping_address_2;
    $fields['billing']['billing_city']['default'] = $shipping_city;
    $fields['billing']['billing_state']['default'] = $shipping_state;
    $fields['billing']['billing_postcode']['default'] = $shipping_postcode;
    return $fields;
}

发货信息发送到另一个地址默认为“自动”,我们将其用于自动填写账单

add_filter( 'woocommerce_checkout_fields' , 'ahmadyani_checkout_field_defaults', 20 );
function ahmadyani_checkout_field_defaults( $fields ) {
    $user = get_user_meta(get_current_user_id());
    $first_name = $user ? $user['shipping_first_name'][0] : '';
    $last_name = $user ? $user['shipping_last_name'][0] : '';
    $company = $user ? $user['shipping_company'][0] : '';
    $shipping_address_1 = $user ? $user['shipping_address_1'][0] : '';
    $shipping_address_2 = $user ? $user['shipping_address_2'][0] : '';
    $shipping_city = $user ? $user['shipping_city'][0] : '';
    $shipping_state = $user ? $user['shipping_state'][0] : '';
    $shipping_postcode = $user ? $user['shipping_postcode'][0] : '';
    $fields['billing']['billing_first_name']['default'] = $first_name;
    $fields['billing']['billing_last_name']['default'] = $last_name;
    $fields['billing']['billing_company']['default'] = $company;
    $fields['billing']['billing_address_1']['default'] = $shipping_address_1;
    $fields['billing']['billing_address_2']['default'] = $shipping_address_2;
    $fields['billing']['billing_city']['default'] = $shipping_city;
    $fields['billing']['billing_state']['default'] = $shipping_state;
    $fields['billing']['billing_postcode']['default'] = $shipping_postcode;
    return $fields;
}