[WordPress] 現在のセッションにカートを保存します。

スポンサーリンク

Question

woocommerce プラグインをワードプレスの e コマース サイトを構築しています、ユーザーをログアウトすることを好むユーザー チェック アウト プロセスを続行し、プロセスを続行、チェック アウト後…、ユーザーが戻ったときにログインを取得しますしたくないが、ユーザーに記録され、彼のカートに商品を追加もう一度カートが空になります

起こってここですか?これは woocommerce の通常の動作ですか。他に何かはあるか?たぶんプラグイン?

ありがとう

答え

ユーザーのログアウトとカートは空に私は最終的にそれを追跡するだと思った

wp_logout()

でワードプレス

wp_clear_auth_cookie()

関数が実行されます。

wp_clear_auth_cookie()

トリガー

do_action( 'clear_auth_cookie' );

アクション フック

WooCommerce のセッション ハンドラー クラス メソッドは、このフックを破壊しているが実行されます

add_action( 'clear_auth_cookie', array( $this, 'destroy_session' ) );

destroy_session()

メソッドはそれからカート クラス

empty_cart()

のラッパーである

wc_empty_cart()

関数を呼び出す方法

WC()->cart->empty_cart( false ); 

ここで重要なことは、パラメーターが

false

です。既定値は

true

を参照してくださいので、私たちが最後に、

empty_cart()

メソッドを追跡します

    /**
     * Empties the cart and optionally the persistent cart too.
     *
     * @access public
     * @param bool $clear_persistent_cart (default: true)
     * @return void
     */
    public function empty_cart( $clear_persistent_cart = true ) {
        $this->cart_contents = array();
        $this->reset();

        unset( WC()->session->order_awaiting_payment, WC()->session->applied_coupons, WC()->session->coupon_discount_amounts, WC()->session->cart );

        if ( $clear_persistent_cart && get_current_user_id() ) {
            $this->persistent_cart_destroy();
        }

        do_action( 'woocommerce_cart_emptied' );
    }

と呼ばれる

persistant_cart_destroy()
true

を渡すとメタ データを削除する この メソッドはユーザーのカートの保管場所

    /**
     * Delete the persistent cart permanently.
     *
     * @access public
     * @return void
     */
    public function persistent_cart_destroy() {
        delete_user_meta( get_current_user_id(), '_woocommerce_persistent_cart' );
    }

と言うことです私はすべて行うと思うして いない カート、ユーザーがログアウトすると、空にする必要がありで再びので。少しより多くの証拠は WooCommerce が戻っインチ、ログインするとすぐに永続的なカートを読み込む

/**
 * Load the cart upon login
 *
 * @param mixed $user_login
 * @param integer $user
 * @return void
 */
function wc_load_persistent_cart( $user_login, $user = 0 ) {

    if ( ! $user )
        return;

    $saved_cart = get_user_meta( $user->ID, '_woocommerce_persistent_cart', true );

    if ( $saved_cart )
        if ( empty( WC()->session->cart ) || ! is_array( WC()->session->cart ) || sizeof( WC()->session->cart ) == 0 )
            WC()->session->cart = $saved_cart['cart'];
}
add_action( 'wp_login', 'wc_load_persistent_cart', 1, 2 );

私はかどうかの動作に戻ります、正常な動作ですだと思うを参照してください他のすべてのプラグインを無効にするをしてください。そこから、あなたは再びそれらを有効にできますが一度に、犯人を特定します。

http://stackoverflow.com/questions/27325626/save-cart-on-the-current-session

スポンサーリンク

Leave a Reply