ホームページ >CMS チュートリアル >&#&プレス >カートを操作するためのwoocommerceアクションとフィルター

カートを操作するためのwoocommerceアクションとフィルター

William Shakespeare
William Shakespeareオリジナル
2025-02-18 10:18:09346ブラウズ

カートを操作するためのwoocommerceアクションとフィルター

WooCommerceアクションとフィルターのマスタリングに関するシリーズの2番目の記事へようこそ。前の記事では、非常に基本的なものでしたが、顧客の請求と配送先住所の処理と、顧客がWooCommerceを介して登録し、SalesforceのようなサードパーティのWebサイトに送信したときに何が起こるかについて説明します。 この2番目の記事では、WooCommerceを使用してeコマースWebサイトを作成しているときに遭遇する可能性のある現実世界のシナリオで、いくつかの巧妙な方法でカートを操作します。

キーテイクアウト

この記事では、プログラムで製品の追加と削除、カートの空き地、インセンティブ製品システムのセットアップなど、アクションとフィルターを使用してWooCommerceカートを操作する方法に関する詳細な指示を提供します。

カートに製品をプログラム的に追加するには、1行のコードのみが必要ですが、テンプレート_redirectアクションなど、すべてのページで実行するアクションでこれを実行しないことが重要です。
    カートから製品をプログラム的に削除することは、それを追加するよりも複雑です。このコードは、カート内の各製品のサイクルを提供し、指定された製品を削除します。
  • この記事では、WooCommerce_ProCeed_To_Checkoutアクションを使用して、プログラムでカートを空にするボタンを作成する方法を示しています。
  • この記事は、インセンティブ製品システムを構築する実世界のシナリオを提供します。このシナリオでは、特定のカテゴリから注文または製品の最小額を持っているなど、特定の要件を満たす顧客に製品が配られます。 🎜>
  • カートに製品をプログラム的に追加します
  • カートに製品をプログラムで追加すると、コードの1行しか必要ありません。あなたがしている唯一のブレインストーミングは、いつ、またはなぜそれをやりたいのかを決定することです。この記事の後半で、この記事の後半で、現実世界のシナリオに取り組むときに、これについて詳しく説明します。
  • カートに製品を追加するのに必要なのは、次のことだけです。
  • 注意事項として、Template_redirectアクションなど、すべてのページで実行されるアクションでこれを実行しないか、これらの製品の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>
カートをプログラム的に空にします

プログラムでカートを空にする方法をよりよく説明するには、顧客がクリックしてカートをクリアできるようにするボタンをカートに追加しましょう。

WooCommerce_ProCeed_To_Checkoutアクションを使用してみましょう。 カートを操作するためのwoocommerceアクションとフィルター

次のステップは、ボタンがクリックされるのを聞くことで、クリックするとカートがクリアされます。そのために、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>
インセンティブ製品

現実世界のシナリオでは、すべての顧客にインセンティブとして製品を提供できるシステムを構築することで、これらすべてを機能させることになります。まあ、すべての顧客と正確にはなく、特定の要件に基づいて資格がある人だけです。 カートを操作するためのwoocommerceアクションとフィルター問題

顧客へのインセンティブとして、お好みの製品を提供できる必要があります。

ソリューション

以下に基づいてインセンティブ製品を配ることができるシステムを構築します。

カートに特定の製品がある注文の最低総額

特定のカテゴリから製品を持っている
  • 私たちはこれを正しい方法で構築するので、これらの基準のいずれかに資格を与える顧客のために製品を配ることができるだけでなく、これらを混同して本当に絞り込むことができます誰が製品を手に入れ、誰が手に入れないか

    これらの基準のいずれかに資格を与えることにより、顧客にインセンティブ製品を提供できるだけでなく、それらを組み合わせる力があります。たとえば、順番に言葉で言えば、カートに少なくとも100ドルの合計100ドルと「衣類」カテゴリの製品をテストすることができます。

    1分で書く機能と、問題/ソリューションシナリオでそれぞれが何をするかを簡単に見てみましょう。

      get_id_from_product($ product、$ check_variations = true) - 製品IDを取得して返します。バリエーションIDを考慮に入れるので、実際の製品IDを確認する前にこれらを確認してください。
    • qualififies_basedon_specific_product($ product_required) - 指定された製品IDをカート内のアイテムの1つとして使用することにより、顧客がインセンティブの資格があるかどうかを確認します。

    • qualififies_basedon_weight($ weight_required) - 顧客がカートに最小重量を持っていることでインセンティブの資格があるかどうかを確認します。
    • qualififies_basedon_cart_total($ total_required) - 税金が計算される前に最小合計金額を持つことにより、顧客がインセンティブの資格があるかどうかを確認します。

    • qualififies_basedon_product_category($ category) - 顧客がカート内の特定のカテゴリの製品を持っていることでインセンティブの資格があるかどうかを確認します。
    • add_incentive_to_cart($ product_id) - 顧客が資格がある場合は、インセンティブ製品をカートに追加します

    • remove_incentive_from_cart($ product_id) - 顧客が製品の資格を持っていなかった場合、インセンティブ製品をカートに削除します。

    • qualifies_for_incentive() - これは、顧客がインセンティブの資格を得るために一致する必要があるルールを持っているため、魔法が起こる場所です。この関数は、インセンティブプログラムのロジックを処理します。
    • ご覧のとおり、これらの関数は「True」または「False」を返します。そのため、それを混同して、本当に柔軟なインセンティブプログラムを作成することが非常に簡単になります。今やるべきことは、顧客がインセンティブ製品の資格を取得し、woocommerce_check_cart_items woocommerceアクションに結び付けられるqualifies_for_incentive()関数を作成するために設定したいルールを考え出すことです。
    • 以下は、これらの関数を使用して本当にユニークなものを作成する方法のいくつかの例です。
    • 1つの要件のみ

      ここに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製品ページを変更できますか? 。たとえば、「WOOCOMMERCE_BEFORE_SINGLE_PRODUCT_SUMMARY」アクションを使用して、製品の要約の前にカスタムコンテンツを追加できます。

    woocommerceの注文詳細を変更するには、 'woocommerce_order_details_after_order_orde_table'アクションを使用できます。このアクションを使用すると、注文詳細ページに注文テーブルの後にカスタムコンテンツを追加できます。 'woocommerce_checkout_fields'フィルターで、WooCommerceのチェックアウトページにカスタムフィールドを追加します。このフィルターを使用すると、新しいフィールドの追加を含むチェックアウトフィールドを変更できます。 、「woocommerce_get_price_html」フィルターを使用できます。このフィルターを使用すると、製品の価格を含む価格HTMLを変更できます。

以上がカートを操作するためのwoocommerceアクションとフィルターの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。