2017-04-05 5 views
1

新しいセッションが開始されたらカートのすべてのアイテムをクリアします。私はそれは、このエラーを投げているWoocommerce新しいセッションでカートからすべての商品を削除する

add_action('init', 'clear_cart_on_it'); 
function clear_cart_on_it() { 
    global $woocommerce; 
    $woocommerce->cart->empty_cart(); 
} 

を試してみた:

Fatal error: Call to a member function empty_cart() on null in /home/shuggapa/public_html/wp-content/plugins/candy-scoops/scoops.php on line 53 

私がなぜ分かりません。どうしたらいいですか?

答えて

-1

コードでは、Woocommerceオブジェクトがインスタンス化される前にinitフックがトリガーされます。あなたはこのフックを使用することができます。

add_action('template_redirect', 'clear_cart_on_it'); 

または

add_action('wp_loaded', 'clear_cart_on_it'); 
+0

'woocommerce_init'が適切な[フック](https://docs.woocommerce.com/wc-apidocs/source-class-WooCommerce.html#446)のようです。 – kontur

0

「Vidish Purohit」の答えを@に追加するには、さらにリファラを確認し、より適切なフックを使用します。削除、利用開始ページで

<form method="post"> 
    <input type="hidden" name="action" value="empty_cart"> 
    <?php wp_nonce_field("empty_cart", "empty_cart"); ?> 
    <button type="submit">Remove all</button> 
</form> 

削除を処理するために、あなたの関数で、このフックを追加します。

add_action('woocommerce_init', 'my_woocommerce_init'); 
function my_woocommerce_init() { 
    if (isset($_POST["action"]) && $_POST["action"] === "empty_cart") { 
     wp_verify_nonce("empty_cart", "empty_cart"); 
     WC()->cart->empty_cart(); 
    } 
} 

まずそれが起こっ提出することを確認します($_POST['action']存在すると、マッチング)、wp_verify_nonceは、POSTが実際に信頼性の高い起点から開始されたことを確認しました。

そして、本質的に、woocommerce_initフックは、グローバルが何かを返すようにします。

関連する問題