WooCommerce で配送方法の価格を動的に更新する方法
P粉605233764
2023-08-13 18:08:43
<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>
このコードはテストされていないため、多少の調整が必要になる可能性がありますが、外部 API 呼び出しを機能させるための正しいパスになる可能性があります。
WC_Session 変数を使用して、渡したい送料を設定してみます:
リーリー次に、フック関数で WC_Session 変数を呼び出すことができます。
リーリーただし、キャッシュされた配送方法を有効にするには、それを更新するための何かが必要です:
リーリー最後に、WC セッション変数の設定を解除します (チェックアウトの最初の読み込みとサンキューページで) :
リーリーコードを子テーマのfunctions.phpファイル(またはプラグイン)に挿入します。それはうまくいくかもしれません。
関連: WooCommerce チェックアウトでカスタム チェックボックスをオンにした後に送料を削除する