目次
概要
コア問題分析
ショッピングカートの追加料金を蓄積します
1.料金設定を定義します
2.ショッピングカートのコンテンツを横断し、料金を蓄積します
3.蓄積された料金をカートに追加します
完全なコードの例
メモとベストプラクティス
要約します
ホームページ バックエンド開発 PHPチュートリアル WooCommerceショッピングカートの製品IDグループに基づいて累積追加料金を実装する

WooCommerceショッピングカートの製品IDグループに基づいて累積追加料金を実装する

Sep 23, 2025 pm 04:57 PM

WooCommerceショッピングカートの製品IDグループに基づいて累積追加料金を実装する

このチュートリアルは、製品の量を考慮しながら、WooCommerceショッピングカートの特定の製品IDグループの追加料金を動的に計算して蓄積する方法を詳細に説明するように設計されています。柔軟な構成アレイと2段階の処理ロジックを構築することにより、カートに同じ料金カテゴリに属する​​複数の製品が含まれている場合、追加料金が正しく集約され、繰り返されるディスプレイまたは計算エラーが回避されるようにします。

概要

WooCommerce Store運用では、サービス料、包装料、特定の処理料など、特定の製品または製品グループに基づいて追加料金が請求されることがよくあります。ただし、カートに同じ料金カテゴリに属する​​複数の製品が含まれている場合、各製品に固定料金を追加するだけで、手数料の繰り返し計算または正しく蓄積できない可能性があります。このチュートリアルでは、料金計算の正確性と柔軟性を確保するために、カスタムコードを介してショッピングカートの追加チャージのインテリジェントな蓄積を実現するための堅牢な方法を紹介します。

コア問題分析

元の問題は、__()関数を使用して複数の製品IDを定義しようとすることです。これは一般的な誤解です。 __()関数は、複数のデータ項目を処理するのではなく、主に文字列の国際化(翻訳)のためにWordPressで使用されます。正しい方法は、複数の製品IDをコード内の効率的なマッチングと処理の配列として定義することです。さらに、費用の蓄積を達成するには、各費用カテゴリの総額を追跡するメカニズムが必要です。

ショッピングカートの追加料金を蓄積します

WooCommerce_cart_calculate_feesフックを介してカスタムロジックを挿入します。これにより、カート料金の計算フェーズ中に料金を追加または変更できます。

1.料金設定を定義します

まず、異なる追加料金カテゴリを定義するには明確な構造が必要です。各カテゴリには以下が含まれている必要があります。

  • Product_id:どの製品がこのコストカテゴリに分類されるかを示す製品IDの配列。
  • 金額:単一の製品(または単位製品あたり)の追加料金の量。
  • 名前:追加料金の表示名。
  • Total_Amount:この料金カテゴリの合計額を蓄積するために使用されるカウンターは、初期値は0でなければなりません。

セットアップ構造の例:

 //設定(複数の設定配列を追加/削除する必要がある場合は削除できます)
$ settings = array(
    配列(
        'Product_id' => array(30、813、815)、// Product ID Array 'lument' => 5、//単一の製品コスト 'name' => __( '追加のサービス料金'、 'Woocommerce')、// fee name 'total_amount' => 0、//アキュムレーター、最初は0
    )、、
    配列(
        'Product_id' => array(817、819、820)、
        「金額」=> 25、
        'name' => __( 'パッキング料金'、 'Woocommerce')、
        'total_amount' => 0、
    )、、
    配列(
        'Product_id' => array(825)、
        「金額」=> 100、
        'name' => __( 'Another Fee'、 'Woocommerce')、
        'total_amount' => 0、
    )、、
);

2.ショッピングカートのコンテンツを横断し、料金を蓄積します

次に、カート内の各アイテムを反復する必要があります。各アイテムについて、IDが定義された料金カテゴリに該当するかどうかを確認します。一致する場合、製品の量と設定額に基づいて、対応するコストカテゴリの合計_amountに蓄積されます。

ロジックの処理:

  1. 現在のショッピングカートアイテムの製品IDと数量を入手してください。
  2. $設定配列を反復し、一致する製品IDを見つけます。
  3. 一致が見つかった場合は、金額にアイテム数量を掛けて、料金カテゴリの合計_amountに追加します。

コードスニペット:

 //カートの内容をループします
foreach($ cart-> get_cart_contents()as $ cart_item){      
    //製品IDを取得します
    $ product_id = $ cart_item ['product_id'];

    //数量を取得します
    $数量= $ cart_item ['Quants']; //製品の量を考慮してください//ループトラフ設定配列(合計量を決定)
    foreach($ settings as $ key => $ setting){
        //製品IDを検索します
        if(in_array($ product_id、$ settings [$ key] ['product_id'])){
            //追加:量 *数量
            $ settings [$ key] ['total_amount'] = $ setting ['amont'] * $数量;
        }
    }       
}

3.蓄積された料金をカートに追加します

すべてのカートアイテムトラバーサルが完了した後、$ settingsアレイの各料金カテゴリの合計_amountには、請求する必要がある合計料金が含まれます。最後のステップは、更新された$設定アレイを反復し、追加料金としてカートにゼロを超えるすべてのTotal_Amountを追加することです。

コードスニペット:

 //ループトラフ設定配列(出力)
foreach($ settings as $ setting){
    // 0以上
    if($ sited ['total_amount']> 0){
        //料金(名前、金額、課税対象)を追加
        $ cart-> add_fee($ sited ['name']、$ sited ['total_amount']、false);    
    }
}

完全なコードの例

上記のロジックをWooCommerceフック関数に統合します。通常、テーマのfunctions.phpファイルまたはカスタムプラグインに配置されます。

 /**
 * WooCommerceカートの特定の製品IDグループに追加料金を追加します。
 *
 * @param wc_cart $ cart woocommerceショッピングカートオブジェクト。
 */
function Action_woocommerce_cart_calculate_fees($ cart){
    //フロントエンドまたはajaxのみで実行され、バックグラウンド管理インターフェイスの競合を回避するためにリクエストが要求されます。
        戻る;
    }

    //料金設定:各配列は料金カテゴリを定義します
    //「金額」は単一の製品(またはユニットごと)の料金です//「名前」はショッピングカートに表示される電荷​​名です。
    $ settings = array(
        配列(
            'Product_id' =>配列(30、813、815)、//たとえば:製品ID 30、813、815は「追加料金」です
            「金額」=> 5、
            'name' => __( '追加のサービス料金'、「woocommerce ')、
            'total_amount' => 0、
        )、、
        配列(
            'Product_id' => array(817、819、820)、//例:製品ID 817、819、820は「パッケージング料金」です
            「金額」=> 25、
            'name' => __( 'パッキング料金'、 'Woocommerce')、
            'total_amount' => 0、
        )、、
        配列(
            'Product_id' => array(825)、//
            「金額」=> 100、
            'name' => __( 'Another Fee'、 'Woocommerce')、
            'total_amount' => 0、
        )、、
    );

    //ステージ1:ショッピングカートのコンテンツを横断し、各料金カテゴリの合計額を蓄積します($ cart-> get_cart_contents()as $ cart_item){      
        $ product_id = $ cart_item ['product_id']; //ショッピングカート製品の製品IDを取得する
        $数量= $ cart_item ['Quants']; //ショッピングカートアイテムの量を取得する//すべてのコスト設定をトラバースし、現在のショッピングカートアイテムが特定の料金カテゴリに属しているかどうかを確認します($ settings as $ key => $ setting){
            //現在のショッピングカート製品の製品IDが特定の料金カテゴリの製品_id配列にある場合(in_array($ product_id、$ settings [$ key] ['product_id']){
                //製品数量設定を考慮して、この料金カテゴリの合計額を追加します[$ key] ['total_amount'] = $ setting ['boment'] * $数量;
            }
        }       
    }

    //ステージ2:更新された料金設定を通過し、蓄積された合計料金をカートに追加する($ settings as $ setting){
        // if($ sited ['total_amount']> 0){
            // add_feeメソッドを使用してショッピングカートに料金を追加する//パラメーター:料金名、料金額、課税対象か
            $ cart-> add_fee($ sited ['name']、$ sited ['total_amount']、false);    
        }
    }
}
add_action( 'woocommerce_cart_calculate_fees'、 'action_woocommerce_cart_calculate_fees'、10、1);

メモとベストプラクティス

  1. コード配置:このコードをfunctions.phpファイルに子テーマのphpファイルに追加するか、カスタムプラグインを介して実装することをお勧めします。親テーマファイルを直接変更すると、テーマが更新されると変更が失われる場合があります。
  2. Total_Amountが行うこと: Total_Amountフィールドは、ショッピングカートを繰り返すときに各料金カテゴリの合計額を追跡するアキュムレータとして機能する$設定アレイで重要です。初期値以外の目的を変更しないでください。
  3. 製品数量の考慮:提供されたコードは、製品の量を考慮しています($ sitted ['nopor'] * $数量;)。追加料金が製品の数量の影響を受けるべきではない場合(つまり、購入数に関係なく料金が一度請求されます)、$ mocation = $ cart_item ['quanty']を削除します。 $ setting ['lument'] * $数量。 $ setting ['lument'];。
  4. 保守性:将来の料金カテゴリの追加、変更、削除を容易にするために、費用設定を中央に管理します。
  5. 税設定: ADD_FEE()関数の3番目のパラメーターは、料金が課税対象かどうかを制御します。例でfalseに設定すると、課税対象ではないことを意味します。ビジネスニーズに合わせて調整します。
  6. エラー処理とデバッグ:開発環境では、error_log()またはvar_dump()を使用して変数をデバッグして、ロジックが正しいことを確認できます。

要約します

上記のチュートリアルを使用すると、WooCommerceカートの製品IDグループに基づいて累積追加料金を柔軟に実装できるようになりました。このアプローチは、複数の製品が同じコストカテゴリに属している場合にコスト蓄積の問題を解決するだけでなく、製品の数を考慮するオプションも提供し、ウコンメルスストアのコスト管理機能を大幅に強化します。これらの手順とベストプラクティスに従うことで、カスタム料金のロジックが安定して保守しやすくなります。

以上がWooCommerceショッピングカートの製品IDグループに基づいて累積追加料金を実装するの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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

ホットAIツール

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Stock Market GPT

Stock Market GPT

AIを活用した投資調査により賢明な意思決定を実現

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

ホットトピック

メールアドレスがPHPで有効かどうかを確認する方法は? メールアドレスがPHPで有効かどうかを確認する方法は? Sep 21, 2025 am 04:07 AM

usefilter_var()tovalidateemailsyntaxandcheckdnsrr()toverifydomainmxrecords.example:$ email = "user@example.com"; if($ email、filter_validate_email)

PHPでオブジェクトの深いコピーまたはクローンを作成する方法は? PHPでオブジェクトの深いコピーまたはクローンを作成する方法は? Sep 21, 2025 am 12:30 AM

useunserialize(serialize($ obj))fordeepcopying whenalldataisserializable;それ以外の場合は、__clone()tomaniallyduplicatededededededavoidsharedReferenceを実装します。

PHPで2つの配列をマージする方法は? PHPで2つの配列をマージする方法は? Sep 21, 2025 am 12:26 AM

usearray_merge()tocombinearrays、urblitingduplicatestringkeysandreindexingnumerickeys; forsimplerconcatenation、inthphp5.6、usethesplatoperator [... $ array1、... $ array2]。

PHPプロジェクトで名前空間を使用する方法は? PHPプロジェクトで名前空間を使用する方法は? Sep 21, 2025 am 01:28 AM

NamesSpacesInphporganizeCodeandPreventnamingConflictsByGroupingClasses、インターフェイス、関数、およびコンテンダントアンダースピフィクティフィクティフィクティフィクティフィクショナル

MySQL条件集計:ケースステートメントを使用して、フィールドの条件合計とカウントを実装する MySQL条件集計:ケースステートメントを使用して、フィールドの条件合計とカウントを実装する Sep 16, 2025 pm 02:39 PM

この記事では、MySQLで条件付き集計を実行するためにケースステートメントを使用して特定のフィールドの条件付き合計とカウントを実現する方法について説明します。実用的なサブスクリプションシステムケースを通じて、レコードステータス(「終了」や「キャンセル」など)に基づいてイベントの合計期間と数を動的に計算する方法を示し、それにより、複雑な条件集計のニーズを満たすことができない従来の合計関数の制限を克服します。チュートリアルでは、左の結合の可能性のあるヌル値を扱う際の合体の重要性を詳細に機能させて、sum機能のケースステートメントの適用を分析します。

PHPの魔法の方法とは何ですか? `__call()`および `__get()`の例を提供します。 PHPの魔法の方法とは何ですか? `__call()`および `__get()`の例を提供します。 Sep 20, 2025 am 12:50 AM

the__call()メソッドは、customhandlingbyacceptingthemetodnameandarguments、ashownwhencollingdsslikesayhello()

PHPを使用してデータベースでレコードを更新する方法は? PHPを使用してデータベースでレコードを更新する方法は? Sep 21, 2025 am 04:47 AM

toupdateadatabaserecordinphp、firstconnectusingpdoormysqli、thenuseprepreadedStatementStoeaseaseesecuresQlupDateQuery.example:$ pdo = newpdo( "mysql:host = localhost; dbname = your_database"、$ username、$ username、$ sibsfar

PHPでファイル拡張機能を取得するにはどうすればよいですか? PHPでファイル拡張機能を取得するにはどうすればよいですか? Sep 20, 2025 am 05:11 AM

usepathinfo($ filename、pathinfo_extension)togetthefileextension; itreliailailavaliavelyhandlesmultipledotsendedgecases、returningtheextension(例えば、 "pdf")oranemptystringifnoneexists。

See all articles