簡體   English   中英

使用會話中保存的 URL 變量預填充 Woocommerce 結賬字段

[英]Pre-fill Woocommerce checkout fields with Url variables saved in session

當人們通過銷售電子郵件中的鏈接以電子郵件和姓名作為參數進入我的 woocommerce 商店時,我想在結帳頁面中預先填寫姓名和電子郵件。

因此我創建了一個動作和過濾器。 這按預期工作,但前提是我在銷售頁面上進行了硬刷新(ctrl + f5)

我已經從緩存和清漆緩存中排除了銷售頁面和結賬頁面,但這並沒有解決問題。

我在這里錯過了什么嗎? 你知道為什么這只適用於硬刷新嗎?

任何幫助是極大的贊賞。

代碼:

    function save()
    {
    if ( is_page( 'sales-page' ) )
    {
        if ( isset( $_GET['tu_em'] ) ) {
            global $woocommerce;
            $woocommerce->session->set( 'tu_em', $_GET['tu_em'] );
        }
        if ( isset( $_GET['tu_name'] ) ) {
            global $woocommerce;
            $woocommerce->session->set( 'tu_name', $_GET['tu_name'] );
        }
    }
}
add_action( 'wp_enqueue_scripts', 'save_email' , 1100);

function override_checkout_email_field( $fields ) {
    global $woocommerce;
    $email = $woocommerce->session->get('tu_em');
    if(!is_null($email)) {
      $fields['billing']['billing_email']['default'] = $email;
    }
    $name = $woocommerce->session->get('tu_name');
    if(!is_null($name)) {
      $fields['billing']['billing_first_name']['default'] = $name;
    }
    return $fields;
}
add_filter( 'woocommerce_checkout_fields' , 'override_checkout_email_field' );

在下面,您將找到正確的工作代碼,將來自 URL (GET) 的用戶數據保存到 WooCommerce 會話中,並使用該數據自動填充相關的結帳字段。

URL 將類似於: http://example.com/sales-page/?tu_em=name@example.com&tu_name=theFirstName : http://example.com/sales-page/?tu_em=name@example.com&tu_name=theFirstName

這可以從任何 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;
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM