WooCommerce で配送方法の価格を動的に更新する方法
P粉605233764
P粉605233764 2023-08-13 18:08:43
0
1
542
<p>配送方法の配送料金を動的に更新しようとしています。 API から配送価格を取得し、API 応答から価格を正常に取得できたら、価格を更新したいと考えています。次のコードを使用しています: </p> <pre class="brush:php;toolbar:false;">function handle_api_response( $rates ) { // API 呼び出しコードはここにあります.... if ($response_code === 200){ $response_data = json_decode($response, true); $price = $response_data['出荷'] } add_filter( 'woocommerce_package_rates', 'set_shipping_prices', PHP_INT_MAX, 1 ); 関数 set_shipping_prices( $rates ) { foreach ( $rates as $rate_id => $rate ) { $rates[ $rate_id ]->コスト = $price; } $rate を返します。 } }</pre> <p>上記のコードは機能しませんが、フィルターを handle_api_response 関数の外に移動し、料金に静的な値を設定すると、機能するようです。このように: </p> <pre class="brush:php;toolbar:false;">function handle_api_response( $rates ) { // API 呼び出しコードはここにあります.... if ($response_code === 200){ $response_data = json_decode($response, true); $price = $response_data['出荷'] } } add_filter( 'woocommerce_package_rates', 'set_shipping_prices', PHP_INT_MAX, 1 ); 関数 set_shipping_prices( $rates ) { foreach ( $rates as $rate_id => $rate ) { $rates[ $rate_id ]->コスト = 50; } $rate を返します。 }</pre> <p>私の問題は、API から価格値を取得しているため、API 応答からの価格を、フィルターがトリガーされたときに実行される set_shipping_prices 関数に渡す必要があることです。 </p>
P粉605233764
P粉605233764

全員に返信(1)
P粉718165540

このコードはテストされていないため、多少の調整が必要になる可能性がありますが、外部 API 呼び出しを機能させるための正しいパスになる可能性があります。

WC_Session 変数を使用して、渡したい送料を設定してみます:

リーリー

次に、フック関数で WC_Session 変数を呼び出すことができます。

リーリー

ただし、キャッシュされた配送方法を有効にするには、それを更新するための何かが必要です:

リーリー

最後に、WC セッション変数の設定を解除します (チェックアウトの最初の読み込みとサンキューページで) :

リーリー

コードを子テーマのfunctions.phpファイル(またはプラグイン)に挿入します。それはうまくいくかもしれません。

関連: WooCommerce チェックアウトでカスタム チェックボックスをオンにした後に送料を削除する

いいねを押す +0
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート