これは2つの理由から起こります。
- ハンドカートの操作は、
WC_Form_Handler
ハンドラークラスで処理されます。場所「には/ class-wc-form-handler.phpが含まれています。そこでは、関数 "update_cart_action()"がカートの更新を処理します。この関数の最後には、$referer
という引数で渡されるwp_safe_redirect
が実行されます。
- あなたのページのソースコードをチェックインすると、 "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番目の引数は、代わりに「印刷」する
- 第四引数はフィールドを引き起こし(カスタマイズの動機である)参照元フィールドの作成を無効にしますの「返された」
これが役立ちます。理想的には、これは機能するはずです。それがうまくいけば、他の人のためにあなたの経験をここに更新してください。
詳細な回答ありがとうございます!それは動作しますが、同時にそれはしません:) "更新カード"を打つとき、私は今チェックアウトページにとどまります。しかし、私がカートで行った変更はなくなった(明らかに処理されていない)。どのようにこのジレンマを解決するためのアイデア? – drake035
私は答えを更新し、私が行った変更とその理由についても説明しました。私は確認し、提案された編集で私のwoocommerceのセットアップでカートの更新を確認しました。新しい編集をお試しください。 – zipkundan
現在動作しています、ありがとうございます:) – drake035