ホームページ >CMS チュートリアル >&#&プレス >カートを操作するためのwoocommerceアクションとフィルター
WooCommerceアクションとフィルターのマスタリングに関するシリーズの2番目の記事へようこそ。前の記事では、非常に基本的なものでしたが、顧客の請求と配送先住所の処理と、顧客がWooCommerceを介して登録し、SalesforceのようなサードパーティのWebサイトに送信したときに何が起こるかについて説明します。 この2番目の記事では、WooCommerceを使用してeコマースWebサイトを作成しているときに遭遇する可能性のある現実世界のシナリオで、いくつかの巧妙な方法でカートを操作します。
キーテイクアウト
<span><span><?php </span></span><span><span>// Takes the Product ID and the Quantity </span></span><span><span>WC()->cart->add_to_cart( 73, 1 );</span></span>
この質問が、ほとんど回答がほとんどないさまざまなフォーラムやウェブサイトで無限の数を尋ねられているのを見ました。うまくいけば、これが次にカートから製品を取り外したいときに役立つことを願っています。また、あなたがする唯一のブレーンストーミングは、いつ、またはカートから製品を削除したいのかということです。次のコードは、誰もが店の製品をチェックアウトすることを防ぎます。なぜあなたがそのようなことをしたいのかはわかりませんが、カートに製品を追加したときの前の例ほど単純ではないカートから製品を取り外すための手順を示します。
<span><span><?php </span></span><span><span>// template_redirect runs once for every page so you'll be </span></span><span><span>// increasing the quantity by one on every page load </span></span><span><span>add_action( 'template_redirect', 'add_random_product' ); </span></span><span><span>function add_random_product() { </span></span><span> <span>WC()->cart->add_to_cart( 73, 1 ); </span></span><span><span>}</span></span>カートをプログラム的に空にします
WooCommerce_ProCeed_To_Checkoutアクションを使用してみましょう。
次のステップは、ボタンがクリックされるのを聞くことで、クリックするとカートがクリアされます。そのために、Template_redirectアクションに接続します。
<span><span><?php </span></span><span><span>add_action( 'template_redirect', 'remove_product_from_cart' ); </span></span><span><span>function remove_product_from_cart() { </span></span><span> <span>// Run only in the Cart or Checkout Page </span></span><span> <span>if( is_cart() || is_checkout() ) { </span></span><span> <span>// Set the product ID to remove </span></span><span> <span>$prod_to_remove = 56; </span></span><span> </span><span> <span>// Cycle through each product in the cart </span></span><span> <span>foreach( WC()->cart->cart_contents as $prod_in_cart ) { </span></span><span> <span>// Get the Variation or Product ID </span></span><span> <span>$prod_id = ( isset( $prod_in_cart['variation_id'] ) && $prod_in_cart['variation_id'] != 0 ) ? $prod_in_cart['variation_id'] : $prod_in_cart['product_id']; </span></span><span> </span><span> <span>// Check to see if IDs match </span></span><span> <span>if( $prod_to_remove == $prod_id ) { </span></span><span> <span>// Get it's unique ID within the Cart </span></span><span> <span>$prod_unique_id = WC()->cart->generate_cart_id( $prod_id ); </span></span><span> <span>// Remove it from the cart by un-setting it </span></span><span> <span>unset( WC()->cart->cart_contents[$prod_unique_id] ); </span></span><span> <span>} </span></span><span> <span>} </span></span><span> </span><span> <span>} </span></span><span><span>}</span></span>ボタンを押した後、通常のテンプレートの代わりにcart-empty.phpが表示されていることに気付くでしょう。
カートから製品を追加または削除する方法を確立したので、カートを完全に空にしても、この種のものを知ることが大きな違いを生む現実世界のシナリオを構築しましょう。
<span><span><?php </span></span><span><span>add_action( 'woocommerce_proceed_to_checkout', 'insert_empty_cart_button' ); </span></span><span><span>function insert_empty_cart_button() { </span></span><span> <span>// Echo our Empty Cart button </span></span><span> <span>echo '<input type="submit" name="empty_cart" value="Empty Cart" />'; </span></span><span><span>}</span></span>インセンティブ製品
現実世界のシナリオでは、すべての顧客にインセンティブとして製品を提供できるシステムを構築することで、これらすべてを機能させることになります。まあ、すべての顧客と正確にはなく、特定の要件に基づいて資格がある人だけです。
顧客へのインセンティブとして、お好みの製品を提供できる必要があります。
以下に基づいてインセンティブ製品を配ることができるシステムを構築します。
カートに特定の製品がある注文の最低総額 特定のカテゴリから製品を持っている私たちはこれを正しい方法で構築するので、これらの基準のいずれかに資格を与える顧客のために製品を配ることができるだけでなく、これらを混同して本当に絞り込むことができます誰が製品を手に入れ、誰が手に入れないか
これらの基準のいずれかに資格を与えることにより、顧客にインセンティブ製品を提供できるだけでなく、それらを組み合わせる力があります。たとえば、順番に言葉で言えば、カートに少なくとも100ドルの合計100ドルと「衣類」カテゴリの製品をテストすることができます。
1分で書く機能と、問題/ソリューションシナリオでそれぞれが何をするかを簡単に見てみましょう。
qualififies_basedon_specific_product($ product_required) - 指定された製品IDをカート内のアイテムの1つとして使用することにより、顧客がインセンティブの資格があるかどうかを確認します。
qualififies_basedon_cart_total($ total_required) - 税金が計算される前に最小合計金額を持つことにより、顧客がインセンティブの資格があるかどうかを確認します。
add_incentive_to_cart($ product_id) - 顧客が資格がある場合は、インセンティブ製品をカートに追加します
remove_incentive_from_cart($ product_id) - 顧客が製品の資格を持っていなかった場合、インセンティブ製品をカートに削除します。
ご覧のとおり、これらの関数は「True」または「False」を返します。そのため、それを混同して、本当に柔軟なインセンティブプログラムを作成することが非常に簡単になります。今やるべきことは、顧客がインセンティブ製品の資格を取得し、woocommerce_check_cart_items woocommerceアクションに結び付けられるqualifies_for_incentive()関数を作成するために設定したいルールを考え出すことです。
ここに1つの要件のみを設定するいくつかの例があります。
<span><span><?php </span></span><span><span>// Takes the Product ID and the Quantity </span></span><span><span>WC()->cart->add_to_cart( 73, 1 );</span></span>
<span><span><?php </span></span><span><span>// template_redirect runs once for every page so you'll be </span></span><span><span>// increasing the quantity by one on every page load </span></span><span><span>add_action( 'template_redirect', 'add_random_product' ); </span></span><span><span>function add_random_product() { </span></span><span> <span>WC()->cart->add_to_cart( 73, 1 ); </span></span><span><span>}</span></span>カートの合計税を除く
<span><span><?php </span></span><span><span>add_action( 'template_redirect', 'remove_product_from_cart' ); </span></span><span><span>function remove_product_from_cart() { </span></span><span> <span>// Run only in the Cart or Checkout Page </span></span><span> <span>if( is_cart() || is_checkout() ) { </span></span><span> <span>// Set the product ID to remove </span></span><span> <span>$prod_to_remove = 56; </span></span><span> </span><span> <span>// Cycle through each product in the cart </span></span><span> <span>foreach( WC()->cart->cart_contents as $prod_in_cart ) { </span></span><span> <span>// Get the Variation or Product ID </span></span><span> <span>$prod_id = ( isset( $prod_in_cart['variation_id'] ) && $prod_in_cart['variation_id'] != 0 ) ? $prod_in_cart['variation_id'] : $prod_in_cart['product_id']; </span></span><span> </span><span> <span>// Check to see if IDs match </span></span><span> <span>if( $prod_to_remove == $prod_id ) { </span></span><span> <span>// Get it's unique ID within the Cart </span></span><span> <span>$prod_unique_id = WC()->cart->generate_cart_id( $prod_id ); </span></span><span> <span>// Remove it from the cart by un-setting it </span></span><span> <span>unset( WC()->cart->cart_contents[$prod_unique_id] ); </span></span><span> <span>} </span></span><span> <span>} </span></span><span> </span><span> <span>} </span></span><span><span>}</span></span>
<span><span><?php </span></span><span><span>add_action( 'woocommerce_proceed_to_checkout', 'insert_empty_cart_button' ); </span></span><span><span>function insert_empty_cart_button() { </span></span><span> <span>// Echo our Empty Cart button </span></span><span> <span>echo '<input type="submit" name="empty_cart" value="Empty Cart" />'; </span></span><span><span>}</span></span>
カテゴリからの製品と最小カートの合計
<span><span><?php </span></span><span><span>// Let's wait for the button to be clicked on </span></span><span><span>add_action( 'template_redirect', 'empty_cart_button_handler' ); </span></span><span><span>function empty_cart_button_handler() { </span></span><span> <span>if( isset( $_POST['empty_cart'] ) && $_SERVER['REQUEST_METHOD'] == "POST" ) { </span></span><span> <span>WC()->cart->empty_cart( true ); </span></span><span> <span>} </span></span><span><span>}</span></span>それよりも高度になり、より複雑なシナリオを作成することもできます。次のステップは、これを「クラス」に変えることです。これにより、複数のインセンティブプログラムを作成できるようになります。 この記事はウコンマースのアクションとフィルターに関するよくある質問(FAQ)
<span><span><?php </span></span><span><span>/** </span></span><span><span> * Will extract the Variation ID if available otherwise it will get the Product ID </span></span><span><span> * <span>@param $product Product </span></span></span><span><span> * <span>@param <span>bool</span> $check_variations Whether or not to check for variation IDs </span></span></span><span><span> * <span>@return <span>mixed</span> </span></span></span><span><span> */ </span></span><span><span>function get_id_from_product( $product, $check_variations = true ) { </span></span><span> <span>// Are we taking variations into account? </span></span><span> <span>if( $check_variations ) { </span></span><span> <span>// Ternary Operator </span></span><span> <span>// http://php.net/manual/en/language.operators.comparison.php </span></span><span> <span>return ( isset( $product['variation_id'] ) </span></span><span> <span>&& ! empty( $product['variation_id']) </span></span><span> <span>&& $product['variation_id'] != 0 ) </span></span><span> <span>? $product['variation_id'] </span></span><span> <span>: $product['product_id']; </span></span><span> <span>} else { </span></span><span> <span>// No variations, just need the product IDs </span></span><span> <span>return $product['product_id']; </span></span><span> <span>} </span></span><span><span>} </span></span><span> </span><span><span>/** </span></span><span><span> * Checks the existence of a specific product in the cart </span></span><span><span> * <span>@param $product_required The Product ID required to be in the cart </span></span></span><span><span> * <span>@return <span>bool</span> </span></span></span><span><span> */ </span></span><span><span>function qualifies_basedon_specific_product( $product_required ) { </span></span><span> <span>/* </span></span><span><span> * We only want to run this on the cart or checkout page </span></span><span><span> */ </span></span><span> <span>if( is_cart() || is_checkout () ) { </span></span><span> <span>foreach( WC()->cart->cart_contents as $key => $product_in_cart ) { </span></span><span> <span>if( $product_required == get_id_from_product( $product_in_cart ) ) { </span></span><span> <span>return true; </span></span><span> <span>} </span></span><span> <span>} </span></span><span> <span>// Return false in case anything fails </span></span><span> <span>return false; </span></span><span> <span>} </span></span><span><span>} </span></span><span> </span><span><span>/** </span></span><span><span> * Checks the cart for the weight required to qualify for the incentive </span></span><span><span> * <span>@param $weight_required Weight Required </span></span></span><span><span> * <span>@return <span>bool</span> </span></span></span><span><span> */ </span></span><span><span>function qualifies_basedon_weight( $weight_required ) { </span></span><span> </span><span> <span>/* </span></span><span><span> * We only want to run this on the cart or checkout page </span></span><span><span> */ </span></span><span> <span>if( is_cart() || is_checkout () ) { </span></span><span> <span>if( $weight_required >= WC()->cart->cart_contents_weight ) { </span></span><span> <span>return true; </span></span><span> <span>} </span></span><span> <span>} </span></span><span> <span>// Return false in case anything fails </span></span><span> <span>return false; </span></span><span><span>} </span></span><span> </span><span><span>/** </span></span><span><span> * Checks the cart for the Total excluding taxes </span></span><span><span> * <span>@param $total_required </span></span></span><span><span> * <span>@return <span>bool</span> </span></span></span><span><span> */ </span></span><span><span>function qualifies_basedon_cart_total( $total_required ) { </span></span><span> <span>/* </span></span><span><span> * We only want to run this on the cart or checkout page </span></span><span><span> */ </span></span><span> <span>if( is_cart() || is_checkout () ) { </span></span><span> <span>if( WC()->cart->subtotal_ex_tax >= $total_required ) { </span></span><span> <span>return true; </span></span><span> <span>} </span></span><span> <span>} </span></span><span> <span>// Return false in case anything fails </span></span><span> <span>return false; </span></span><span><span>} </span></span><span> </span><span><span>/** </span></span><span><span> * Checks the cart to verify whether or not a product from a Category is in the cart </span></span><span><span> * <span>@param $category Accepts the Product Category Name, ID, Slug or array of them </span></span></span><span><span> * <span>@return <span>bool</span> </span></span></span><span><span> */ </span></span><span><span>function qualifies_basedon_product_category( $category ) { </span></span><span> <span>foreach( WC()->cart->cart_contents as $key => $product_in_cart ) { </span></span><span> <span>if( has_term( $category, 'product_cat', get_id_from_product( $product_in_cart, false ) ) ) { </span></span><span> <span>return true; </span></span><span> <span>} </span></span><span> <span>} </span></span><span> <span>// Return false in case anything fails </span></span><span> <span>return false; </span></span><span><span>} </span></span><span> </span><span><span>/** </span></span><span><span> * Adds a specific product to the cart </span></span><span><span> * <span>@param $product_id Product to be added to the cart </span></span></span><span><span> */ </span></span><span><span>function add_incentive_to_cart( $product_id ) { </span></span><span> <span>// Check the cart for this product </span></span><span> <span>$cart_id = WC()->cart->generate_cart_id( $product_id ); </span></span><span> <span>$prod_in_cart = WC()->cart->find_product_in_cart( $cart_id ); </span></span><span> <span>// Add the product only if it's not in the cart already </span></span><span> <span>if( ! $prod_in_cart ) { </span></span><span> <span>WC()->cart->add_to_cart( $product_id ); </span></span><span> <span>} </span></span><span><span>} </span></span><span> </span><span><span>/** </span></span><span><span> * Removes a specific product from the cart </span></span><span><span> * <span>@param $product_id Product ID to be removed from the cart </span></span></span><span><span> */ </span></span><span><span>function remove_incentive_from_cart( $product_id ) { </span></span><span> <span>$prod_unique_id = WC()->cart->generate_cart_id( $product_id ); </span></span><span> <span>// Remove it from the cart by un-setting it </span></span><span> <span>unset( WC()->cart->cart_contents[$prod_unique_id] ); </span></span><span><span>}</span></span>woocommerceアクションとフィルターの違いは何ですか?アクションとフィルターは、WooCommerceの2つのタイプのフックです。アクションを使用すると、Webサイトに新しいセクションを追加したり、チェックアウトプロセスを変更したりするなど、機能を追加または変更できます。一方、フィルターでは、WooCommerce内のデータを変更できます。たとえば、フィルターを使用して製品の価格を変更したり、ボタンのテキストを変更したりできます。 WooCommerceカートにカスタムフィールドでは、 'Woocommerce_cart_item_data'フィルターを使用できます。このフィルターを使用すると、CARTアイテムにカスタムデータを追加できます。次に、「woocommerce_get_item_data 'フィルターを使用してカートにこのカスタムデータを表示できます。およびフィルター。たとえば、「woocommerce_checkout_fields 'フィルターを使用してチェックアウトフィールドを変更できます。または、「woocommerce_checkout_process'アクション」を使用してチェックアウトプロセスにカスタム検証を追加します。
はい、WooCommerceはWooCommerceから送信された電子メールを変更できるいくつかのフックを提供します。たとえば、「WOOCOMMERCE_EMAIL_HEADER」および「WOOCOMMERCE_EMAIL_FOOTER」アクションを使用して、電子メールのヘッダーとフッターを変更するか、「WOOCOMMERCE_EMAIL_ORDER_DETAILS」アクションを使用して、電子メールに含まれる注文の詳細を変更します。
フックを使用してWooCommerce製品ページを変更できますか? 。たとえば、「WOOCOMMERCE_BEFORE_SINGLE_PRODUCT_SUMMARY」アクションを使用して、製品の要約の前にカスタムコンテンツを追加できます。
以上がカートを操作するためのwoocommerceアクションとフィルターの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。