WooCommerceでカスタム配送方法を追加する方法

公開: 2020-09-01

WooCommerceカスタム配送方法を追加 WooCommerceに精通している場合は、WooCommerceが非常に便利な機能セットを備えた優れた無料のeコマースソリューションであることをご存知でしょう。 際立っているのは、WooCommerceがWordPressのモジュール性と同様に拡張性を念頭に置いて開発されていることです。

ただし、WooCommerceから何か特別なものが必要な場合、たとえば、カスタム配送方法を追加したい場合など、WooCommerceでは必要なものがすべて提供されないことがよくあります。 それでも、この簡単なチュートリアルのように心配する必要はありません。送料を計算するWooCommerceの簡単な配送方法を作成する方法を学びます。

さらに、一部の国で配送方法を利用できるように、プラグインにいくつかの制限を追加する方法を学習します。

配送方法のカスタム配送ルール

このセクションでは、コードの作成に使用する配送方法のカスタム配送ルールを作成します。 配送方法でコストを計算する方法と、配送できる場所を定義します。 これは、コストが出荷先の重量とゾーンによって決定されることを意味します。

この例では、米国、カナダ、ドイツ、英国、イタリア、スペイン、ケニアに発送します。 ケニアはゾーン0が$ 10、イタリアゾーン1が$ 30、スペインゾーン2が$ 50、英国ゾーン2が$ 50、米国、カナダゾーン3が$ 70になります。

重量については、0〜10kgを無料、11〜30kgを5ドル、31〜50kgを10ドル、51〜100kgを20ドルで価格設定します。

コーディングを開始する準備ができているかもしれませんが、まだです。 まず、 WooCommerce ShippingAPIについて学ぶ必要があります。 カスタム配送メソッドを作成する場合は、WooCommerce抽象クラスWC_Shipping_Methodからクラスを拡張する必要があります。 これには、次のようないくつかの定義済み属性があります。

  • $id :必要な配送のID(スラッグ、キーワード)。
  • $number :これは整数IDです。
  • $method_title :管理者に表示される配送の名前。
  • $method_description :adminに表示される配送の簡単な説明(オプション)。
  • $enabled :文字列ブール値「yes」または「no」。配送が有効になっているかどうか、および使用できるかどうかの情報を提供します。
  • $title :サイトに配送名を表示するために使用されます。
  • $availability available:これは、配送が利用可能かどうかを定義します。
  • $countries :このメソッドが有効になっている国の配列。 デフォルト値は空の配列です。
  • $tax_status :デフォルト値は課税対象です。 アイテムが課税対象である場合、税金が請求されます。
  • $fee :デフォルト値は0です
  • $minimum_fee :メソッドの最小料金とデフォルト値はnullです。
  • $has_settings :これは、このメソッドに設定があるかどうかを定義します。 デフォルト値はtrueです。
  • $supports features:このメソッドがサポートする機能を含む配列。 デフォルト値は空の配列です。
  • $rates :一連の料金で、送料を登録するにはこれを入力する必要があります。 デフォルト値は空の配列です。

WC_Shipping_Methodで定義されているメソッドは次のとおりです。

  • is_taxable() :これは、配送料に加えて税金を計算する必要があるかどうかを返します。
  • add_rate( $args = array() ) :これにより、パラメーター$ argsで定義された配送料が属性$ ratesにプッシュされます。
  • has_settings() :これは属性$ has_settingsの値を返します。
  • is_available() :これは、配送が利用可能であり、属性$ countriesに国が設定されていて属性$ availabilityがinclude、specificまたはexceptingの値に設定されている場合に返され、国が配送可能である場合はtrueまたはfalseを返します。 。
  • get_title() :これはこの配送のタイトルを返します。
  • get_fee( $fee, $total ) :これは、解析された$ feeと$ totalに基づいて、この送料の料金値を返します。
  • supports( $feature ) :これは、この配送方法が機能をサポートしているかどうかを返します。

クラスWC_Shipping_MethodはクラスWC_Settings_APIを拡張するため、より多くの属性とメソッドがありますが、簡単にするためにここでは説明しません。

また、配送業者が設定を取得または設定し、配送の実際のコストを計算できるように、他の方法を定義する必要があります。 ここにリストされているこれらのメソッド:

  • init() :これはフォームフィールドと設定を作成します。 ただし、その中のメソッドを使用し、__ constructorメソッドで呼び出す限り、別の名前を付けることができます。
  • calculate_shipping( $package ) :このメソッドは、この配送のコストを計算するために使用され、パッケージは配送する商品の配列です。

calculate_shippingメソッドに焦点を当てたいと思います。 この例では、このメソッドを使用して、add_rateメソッドに追加します。 このメソッドは、次のようないくつかのオプションを持つ配列を受け入れます。

  • id :これはレートのIDです。
  • label :これはレートのラベルです。
  • cost :送料の金額。
  • taxes :一連の税金を受け入れるか、何も受け入れないため、税金はWooCommerceによって計算されます。 税金を受け入れたくない場合は、falseを受け入れることができます。
  • calc_tax :これはper_orderまたはper_itemを受け入れます。 per_itemを使用する場合は、一連のコストを提供する必要があります。

WooCommerceプラグイン内で定義されたWordPressフィルターを使用して、クラスの名前を渡すことにより、登録されたメソッドの配列にshippingメソッドを追加する配列を取得するためにWordPressフィルターを使用します。 このフィルターはwoocommerce_shipping_methodsと呼ばれます。

これをテーブルに置いて、この簡単なチュートリアルのコーディングセクションに入り、共有するPHPスニペットの概念全体を理解できるようにします。

a)新しい配送クラスを作成する手順

このセクションでは、WooCommerceを拡張する新しいプラグインとして配送方法を作成します。

  1. まず、 wp-content>プラグインを開き、新しいフォルダーを作成する必要があります。 このために、私はnjengah-shippingという名前を使用します
  2. 次に、同じ名前のファイルを作成する必要がありますnjengah –shipping.php
  3. このファイルに次のコードを追加します。
 <?php

/ **
*プラグイン名:Njengah Shipping
*プラグインURI:https://njengah.com/plugins/
* 説明: 
*バージョン:1.0.0
*著者:Joe Njenga
*作成者URI:https://njengah.com
s
* /

if(!defined( 'WPINC')){

死ぬ;

}
/ *
* WooCommerceがアクティブかどうかを確認します
* /
if(in_array( 'woocommerce / woocommerce.php'、apply_filters( 'active_plugins'、get_option( 'active_plugins')))){

関数njengahplus_shipping_method(){

if(!class_exists( 'NjengahPlus_Shipping_Method')){

クラスNjengahPlus_Shipping_MethodはWC_Shipping_Methodを拡張します{

/ **

*配送クラスのコンストラクター

*

* @access public

* @return void

* /

パブリック関数__construct(){

$ this-> id = 'njengahplus';

$ this-> method_title = __( 'NjengahPlus Shipping'、 'njengahplus');

$ this-> method_description = __( 'NjengahPlusのカスタム配送方法'、 'njengahplus');

$ this-> init();

$ this-> enabled = isset($ this-> settings ['enabled'])? $ this-> settings ['enabled']: 'yes';

$ this-> title = isset($ this-> settings ['title'])? $ this-> settings ['title']:__( 'NjengahShipping'、 'njengahplus');

}

/ **
*設定を初期化します
*
* @access public

* @return void

* /

関数init(){

//設定APIをロードします

$ this-> init_form_fields();

$ this-> init_settings();

//設定が定義されている場合は、管理者に設定を保存します

add_action( 'woocommerce_update_options_shipping _'。$ this-> id、array($ this、 'process_admin_options'));

}


/ **

*この配送の設定フィールドを定義する

* @return void

* /

関数init_form_fields(){

//ここに設定を追加します

}

/ **
*この関数は、送料を計算するために使用されます。 この関数内で、重み、寸法、およびその他のパラメーターを確認できます。
*
* @access public
* @ param混合$ package
 @return void
* /

パブリック関数calculate_shipping($ package){


//ここにコスト、レート、ロジックを追加します

}

}

}

}


add_action( 'woocommerce_shipping_init'、 'njengahplus_shipping_method');

function add_njengahplus_shipping_method($ methods){

$ methods [] = 'NjengahPlus_Shipping_Method';
$ methodsを返します。
}

add_filter( 'woocommerce_shipping_methods'、 'add_njengahplus_shipping_method');

}

使い方

  • まず、定数WPINCが定義されているかどうかを確認します。 定義されていない場合は、誰かがこのファイルに直接またはWordPressではない場所からアクセスしようとしていることを意味します。
  • 次に、WooCommerceがアクティブかどうかを確認する必要があります。 ここでは、woocommerce.phpが、オプションactive_pluginsの下でデータベースに保存されているアクティブなプラグインの配列に含まれているかどうかを確認しています。
  • woocommerce_shipping_initは、インスタンス化される前のすべての配送クラスを含むWooCommerceShippingのメインアクションです。 このアクションを使用すると、WooCommerceが初期化された後、WooCommerceがそれを使用するための適切な場所に配送方法が含まれるようになります。
  • __constructメソッドはいくつかの一般的な属性を設定し、それらのいくつかは、メソッドinitのデータベースから設定がロードされた後に簡単に上書きできます。
  • 他のメソッドは、チュートリアルの後半で定義するため、空のままにしておきます。

次に、以下に示す手順を使用してプラグインをアクティブ化する必要があります。

  1. WordPressサイトにログインし、管理者ユーザーとしてダッシュボードにアクセスします。
  2. ダッシュボードメニューから、プラグインをクリックし、以下に示すようにNjengah配送をアクティブにします。 プラグインをアクティブ化する
  3. プラグインをアクティブ化した後、 WooCommerce> Settingsに移動します。 WooCommerceタブをクリックしてから、 NjengahPlusshippingをクリックします。 あなたはこれを見ることができるはずです: 最初のコードの結果

b)国の可用性の設定

私たちが作成した配送方法は、以前に決定された国のリストでのみ利用可能です。

  1. これをメソッド__constructに追加します
 <?php

//..。

$ this-> method_description = __( 'NjengahPlusのカスタム配送方法'、 'njengahplus');

//可用性と国

$ this-> availability = '含む';

$ this-> countrys = array(

'US'、//アメリカ合衆国

'CA'、//カナダ

'DE'、//ドイツ

'GB'、//イギリス

'IT'、//イタリア

'ES'、//スペイン

'HR' //ケニア

);

$ this-> init();

//..。

コードのしくみ

可用性属性は「含む」に設定されているため、この配送は、countries属性の国でのみ利用できます。

WooCommerceは、配送国が属性国に含まれているかどうかを確認します。

設定の作成

このコードをコピーして、メソッドinit_form_fieldsにデータを入力するだけです。

 <?php



関数init_form_fields(){

$ this-> form_fields = array(

'有効' => array(

'title' => __( 'Enable'、 'njengahplus')、

'type' => 'チェックボックス'、

'description' => __( 'この配送を有効にします。'、 'njengahplus')、

'デフォルト' => 'はい'

)、


'title' => array(

'title' => __( 'Title'、 'njengahplus')、

'タイプ' => 'テキスト'、

'description' => __( 'サイトに表示されるタイトル'、 'njengahplus')、

'デフォルト' => __( 'NjengahPlus Shipping'、 'njengahplus')

)、


);


}

結果を確認するには、次の手順に従います。

  1. WordPressサイトにログインし、管理者ユーザーとしてダッシュボードにアクセスします。ダッシュボードメニューから、 WooCommerce>設定をクリックします。
  2. 以下に示すように、[配送]タブをクリックし、[NjengahPlus配送]をクリックします。 Njengahプラス配送
  3. チェックボックスを有効にして、変更を保存します。

発送方法は100kgまで設定できます。 その後、そのルールがすぐに変更された場合は、設定で編集できるようにします。 これを設定すると、設定コードは次のようになります。

 <?php




関数init_form_fields(){

$ this-> form_fields = array(

'有効' => array(

'title' => __( 'Enable'、 'njengahplus')、

'type' => 'チェックボックス'、

'description' => __( 'この配送を有効にします。'、 'njengahplus')、

'デフォルト' => 'はい'

)、


'title' => array(

'title' => __( 'Title'、 'njengahplus')、

'タイプ' => 'テキスト'、

'description' => __( 'サイトに表示されるタイトル'、 'njengahplus')、

'デフォルト' => __( 'NjengahPlus Shipping'、 'njengahplus')

)、


'重み' =>配列(

'タイトル' => __( '重量(kg)'、 'njengahplus')、

'タイプ' => '数値'、

'description' => __( '最大許容重量'、 'njengahplus')、

'デフォルト' => 100

)、


);

}

上記のコードでは、設定の下で最大ウェイトを設定しました。 結果は次のとおりです。 最大重量

c)送料の計算

送料を計算するために、calculate_shippingメソッドを一度に1ステップずつ更新して、各ステップを理解できるようにします。

  1. まず、重量でコストを取得する必要があります。 これを行うには、次のコードをメソッドcalculate_shippingに追加するだけです。
 <?php

//..。

パブリック関数calculate_shipping($ package){


$ weight = 0;

$ cost = 0;

$ country = $ package ["destination"] ["country"];

foreach($ package ['contents'] as $ item_id => $ values)

{{

$ _product = $ values ['data'];

$ weight = $ weight + $ _product-> get_weight()* $ values ['quantity'];

}

$ weight = wc_get_weight($ weight、 'kg');

if($ weight <= 10){

$ cost = 0;

} elseif($ weight <= 30){

$ cost = 5;


} elseif($ weight <= 50){


$ cost = 10;


} それ以外 {

$ cost = 20;

}

}
  1. 上記のコードから、カートの重量に基づいたコストが得られます。選択した配送国のコストを計算する必要があります。 これを行うには、次のコードを追加します。
 <?php


パブリック関数calculate_shipping($ package){


$ countryZones = array(

'HR' => 0、

'US' => 3、

'GB' => 2、

'CA' => 3

'ES' => 2、

'DE' => 1、

'IT' => 1

);


$ zonePrices = array(

0 => 10、

1 => 30

2 => 50、

3 => 70

);


$ zoneFromCountry = $ countryZones [$ country];

$ priceFromZone = $ zonePrices [$ zoneFromCountry];


$ cost + = $ priceFromZone;

}

  1. 総重量で計算し、発送国別の費用も加算しています。 最後のステップは、このコードを追加してレートを登録することです。

コードのしくみ

このセクションの最初のスニペットでは、いくつかの開始変数を定義しました: $weight$cost 、および$country 。 合計を取得するには、カートを反復処理し、カート内の各製品の重量を変数$weightに追加して、合計重量を取得します。

総重量を取得した後、 function wc_get_weightを使用して、重量をキログラムに変換します。これは、出荷方法で制限が設定されている単位であるためです。 そして最後に、制限を100kgに設定しました。

2番目のスニペットでは、配列$countryZonesが各国のゾーンを保持し、2番目の配列$zonePricesが各ゾーンの価格を保持しています。

これは、イタリアゾーン1の結果になります。 結果イタリア

これは、スペインゾーン2の結果になります。 結果スペイン

これは、カナダゾーンの結果になります。

最終結果

このコードを実装するのに苦労した場合は、ここに完全なコードがあります:

 <?php


パブリック関数calculate_shipping($ package){

$ weight = 0;

$ cost = 0;

$ country = $ package ["destination"] ["country"];

foreach($ package ['contents'] as $ item_id => $ values)

{{

$ _product = $ values ['data'];

$ weight = $ weight + $ _product-> get_weight()* $ values ['quantity'];

}
$ weight = wc_get_weight($ weight、 'kg');

if($ weight <= 10){

$ cost = 0;

} elseif($ weight <= 30){

$ cost = 5;

} elseif($ weight <= 50){

$ cost = 10;

} それ以外 {

$ cost = 20;

}

$ countryZones = array(

'HR' => 0、

'US' => 3、

'GB' => 2、

'CA' => 3

'ES' => 2、

'DE' => 1、

'IT' => 1

);




$ zonePrices = array(

0 => 10、

1 => 30

2 => 50、

3 => 70

);


$ zoneFromCountry = $ countryZones [$ country];

$ priceFromZone = $ zonePrices [$ zoneFromCountry];

$ cost + = $ priceFromZone;

$ rate = array(

'id' => $ this-> id、

'label' => $ this-> title、

'コスト' => $ cost

);

$ this-> add_rate($ rate);

}

結論

この投稿では、WooCommerceにカスタム配送方法を追加するためのカスタムプラグインを作成しました。 さらに、簡単な手順で配送方法を作成できるWooCommerce ShippingAPIを紹介しました。 また、配送方法の在庫状況またはコストを計算するときに、配送方法内で制限と在庫状況を設定できます。 ただし、WooCommerceアクションを使用して、配送方法の外部で設定できます。 このチュートリアルが、WooCommerceにカスタム配送方法を追加するためのソリューションを提供したことを願っています。

同様の記事