Woocommerce 配送エリア方法をカスタマイズする
P粉558478150
2023-08-29 10:57:38
<p>私はカスタムの配送地域メソッドを作成するためのソリューションを実装する適切な方法を見つけるために数時間を費やしました。 </p>
<p>トイレ:7.2.2
仕事のストレス: 6.0.3</p>
<p>サイトは良好な状態にあり、権限エラーなどはありません (入手可能な情報のみが更新されます)</p>
<p>次のような多くのソースを使用しました。
https://woocommerce.github.io/woocommerce-rest-api-docs/?php#shipping-zone-methods</p>
<p>https://github.com/woocommerce/woocommerce/wiki/ Shipping-Method-API#properties</p>
<p>https://gist.github.com/mikejolley/3b37b9cc19a774665f31</p>
<p>https://code.tutsplus.com/tutorials/create-a-custom-shipping-method-for-woocommerce--cms-26098</p>
<p>他にもたくさんあります。 </p>
<p>基本的に、カスタム送料関数を備えた配送ゾーンメソッド (プラグイン) を作成するためのサンプルコードが必要です。私たちは Woocommerce Easy Booking に基づいており、メタデータに数日かかるため、それを処理するために woocommerce 公式プレミアム プラグインの 1 つを使用できません。</p>
<p>我最终得了以下代:</p>
<pre class="brush:php;toolbar:false;"><?php
if (!define('ABSPATH')) {
出口; // 直接アクセスした場合は終了
}
関数 your_shipping_method_init()
{
if (!class_exists('WC_Your_ Shipping_Method')) {
クラス WC_Your_ Shipping_Method は WC_ Shipping_Method を拡張します
{
/*** 配送クラスのコンストラクター
*
* @アクセスパブリック
* @return void*/
パブリック関数 __construct()
{
$this->id = 'diet_day_shipping'; // 配送方法の ID。ユニークなはずです。
$this->method_title = __('ダイエット日ごとの送料'); // 管理者に表示されるタイトル
$this->method_description = __('予約ごとの送料'); // admin に表示される説明
$this->有効 = "はい"; // これは設定として追加できますが、この例では強制的に有効になっています
//$this->title = "簡単予約 1 日あたりの発送"; // これは設定として追加できますが、この例では強制されています。
//$this->rates = array('calculate_shipping');
$this->supports = array(
'配送ゾーン',
'インスタンス設定',
'インスタンス設定モーダル',
);
$this->instance_form_fields =
配列(
'タイトル' =>配列(
'タイトル' => __('メソッドのタイトル'),
'タイプ' => '文章'、
'説明' => __('これは、チェックアウト中にユーザーに表示されるタイトルを制御します。'),
'デフォルト' => __('あなたのダイエットのための毎日の配達'),
)、
'コスト' =>配列(
'タイトル' => __('料金')、
'タイプ' => '番号'、
'説明' => __('これにより 1 日あたりのコストが制御されます。'),
'デフォルト' => 7、
)
);
$this->init();
$this->title = $this->get_option('title');
$this->コスト = $this->get_option('コスト');
add_action('woocommerce_update_options_shipping_' . $this->id, array($this, 'process_admin_options'));
}/*** 設定を初期化します
*
* @アクセスパブリック
* @return void*/
関数初期化()
{
// 設定APIをロードする
$this->init_form_fields();
// 定義した設定がある場合は、管理者に設定を保存します
add_action('woocommerce_update_options_shipping_' . $this->id, array($this, 'process_admin_options'));
}
関数 init_form_fields()
{
$this->form_fields = array(
'タイトル' =>配列(
'タイトル' => __('メソッドのタイトル'),
'タイプ' => '文章'、
'説明' => __('これは、チェックアウト中にユーザーに表示されるタイトルを制御します。'),
'デフォルト' => __('毎日のダイエットの送料'),
)、
'コスト' =>配列(
'タイトル' => __('料金')、
'タイプ' => '番号'、
'説明' => __('これにより 1 日あたりのコストが制御されます。'),
'デフォルト' => 7、
)
);
}
/*** 計算_配送関数。
* @param array $package (デフォルト: array())*/
パブリック関数 Calculate_shipping($package = array())
{
//テスト用のハードコード
$shipping_number = 7;
//おそらく最終的な送料を計算する方法
/*
foreach ($package['contents'] as $item_id => $values) {
$_product = $values['データ'];
$shipping_number = $shipping_number $_product->wceb_get_product_booking_duration() * $values['数量'];
}*/
$this->add_rate(array(
'id' => $this->id 。 $this->instance_id、
'ラベル' => 「ドスタワ ポザ ワワ」、
'コスト' => $shipping_number、
));
}
}
}
}
add_action('woocommerce_shipping_init', 'your_shipping_method_init');
関数 add_your_shipping_method($methods)
{
$methods['diet_day_shipping'] = 'WC_Your_shipping_Method';
$methods を返します。
}
add_filter('woocommerce_shipping_methods', 'add_your_shipping_method');</pre>
<p>私たちは 2 つの設定が必要です (エリア、方法内でのみ可能で、全体的な必要はありません) マーク (顧客に表示) とアダルト - 多くの人の滞在数の価値を把握しています。
<p>私たちが考えている「制限」ボタンは、中継エリアの方法に関して以下に示す方法であり、その中にこれらの値を設定できます。</p>
<p>誰か私のコードの修正を手伝ってくれませんか? </p>
<p>現在、管理パネルに表示される設定オプションはありません。配送地域の方法行にも、sgipping 設定パネルにもありません。 </p>
<p>また、カスタム配送方法を使用してゾーンから郵便番号を送信すると、カートにはその郵便番号で利用できる配送方法がないことが表示されます)</p>
私も、非常に似た問題を解決するために、昨日は 3 時間、今日はさらに 1 時間を費やしました。私は今、解決策を見つけたか、少なくともあなたを正しい方向に導く手助けができると信じています。 WooCommerce の公式ドキュメントでは、settings と インスタンス設定 が区別されているようです (インスタンス設定に関するドキュメントが見つかりません - 詳細は次の段落で)。
以下は、私が試行錯誤を通じてこれまでに発見したことに基づいています。これに関する「公式」文書を持っている人がいたら、この返信に対するコメントを楽しみにしています。
「設定」と「インスタンス設定」を区別することが非常に重要です。 WooCommerce バックエンドの視覚的な比較については、この画像を参照してください:
######設定######設定は「グローバル配送モード設定」を参照します。つまり、これらはグローバル サブメニューに表示されますが、配送エリア内には表示されません。 WooCommerce の公式ドキュメントには、設定の使用方法と新しい設定ページの追加方法が記載されています:
https://woocommerce.com/document/shipping-method-api/https://woocommerce.com/document/settings-api/一个>
設定機能/APIを使用するには、を指定する必要があります リーリー コンストラクター内。 p>
「設定」はグローバルに、つまり個々の配送地域とは独立して適用/使用/保存されます。
インスタンス設定インスタンス設定は、配送地域ごとに個別に保存できる設定です。それらを使用するには、 を使用する必要があります リーリー コンストラクター内。
次の例では、インスタンス セットアップ API の微妙だが重要な違いを理解できます:
https://gist.github.com/malkafly/57a5e07fd03d6fd5cab84c6182d84c86コードの違いと元の質問について
2 つの API の正確な機能とプロパティには微妙な違いがあることに注意してください。状況に応じて、これらの API のいずれかを使用することを決定し、その API を厳密に使用する必要があります。 2 つの API を混同しているため、カスタム配送方法を機能させることができない可能性があります。 (グローバル) 設定 API を使用する場合:
コンストラクターが次のようになっているか、次のコードが含まれていることを確認してください:
リーリー$this->instance_settings['title'] を使用して保存された設定を取得します