2016-03-30 17 views
0

購入プロセスを短縮するため、クライアントはCart pageCheckout pageをマージするようにリクエストしました。製品ページ>カートページ>チェックアウトページ商品ページ>チェックアウトページ全体のコンテンツにはcart.phpが追加されています)。WooCommerce:Checkoutページからカートを更新する

問題:formのカートのアクション属性をCheckout pageのURLに設定した後でも、「カートを更新」を押すとまだCart pageにリダイレクトされます。どのようなアイデアをなぜ、どのように修正するか?

答えて

1

これは2つの理由から起こります。

  1. ハンドカートの操作は、WC_Form_Handlerハンドラークラスで処理されます。場所「には/ class-wc-form-handler.phpが含まれています。そこでは、関数 "update_cart_action()"がカートの更新を処理します。この関数の最後には、$refererという引数で渡されるwp_safe_redirectが実行されます。
  2. あなたのページのソースコードをチェックインすると、 "Update Cart"ボタンのすぐ下に2つの非表示フィールド "_wpnonce"と "_wp_http_referer"が表示されます。これらの2つのフィールドは、関数wp_nonce_field('woocommerce-cart');のためにレンダリングされます。これはテンプレート更新ボタンの後にテンプレートcart.phpにあります。さらに詳しい情報Here

この "_wp_http_referer"の値はWC_Form_Handlerに転記され、$refererとして渡されます。レンダリングされている "_wp_http_referer"フィールドを削除する必要があります。

これは、デフォルトのwp_nonce_field機能を次のものに置き換えることで可能です。

wp_nonce_field(-1, 'woocommerce-cart', false, true); //previous suggest 
----- 
//updated suggest below. (explanation follows) 
wp_nonce_field('woocommerce-cart', '_wpnonce', false, true); 

_wpnonceフィールドは、セキュリティのためにのみリファラフィールドのrendereingを無効にして上記の行にあるように「false」に引数を必要とされます。

最初の2つの引数の変更された値についての説明。関数ハンドリングカートの更新は、カート内で作成されたノンスフィールドを確認します。 previous suggestはreferrerフィールドを無効にしますが、nonceフィールドの名前も'woocommerce-cart'に設定します。このため、ノンス検証は失敗します。 nonceの検証は、nonceフィールドを、その関数内でハードコードされている名前と照らし合わせてチェックします。'_wpnonce'とnonceフィールドのアクションは'woocommerce-cart'です。 更新された提案/編集は、検証を満たし、参照元フィールドの作成を無効にした'_wpnonce'という名前のnonceフィールドを作成します。

したがって:

  • 最初の引数が(ナンスが確認され、これに対して)アクション名を設定します。
  • 第2引数は( セキュリティチェックと一致する)ナンスフィールドの名前を設定します
  • 3番目の引数は、代わりに「印刷」する
  • 第四引数はフィールドを引き起こし(カスタマイズの動機である)参照元フィールドの作成を無効にしますの「返された」

これが役立ちます。理想的には、これは機能するはずです。それがうまくいけば、他の人のためにあなたの経験をここに更新してください。

+0

詳細な回答ありがとうございます!それは動作しますが、同時にそれはしません:) "更新カード"を打つとき、私は今チェックアウトページにとどまります。しかし、私がカートで行った変更はなくなった(明らかに処理されていない)。どのようにこのジレンマを解決するためのアイデア? – drake035

+0

私は答えを更新し、私が行った変更とその理由についても説明しました。私は確認し、提案された編集で私のwoocommerceのセットアップでカートの更新を確認しました。新しい編集をお試しください。 – zipkundan

+0

現在動作しています、ありがとうございます:) – drake035