更新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['shipments']
}
add_filter( 'woocommerce_package_rates', 'set_shipping_prices', PHP_INT_MAX, 1 );
function set_shipping_prices( $rates ) {
foreach ( $rates as $rate_id => $rate ) {
$rates[ $rate_id ]->cost = $price;
}
return $rates;
}
}</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['shipments']
}
}
add_filter( 'woocommerce_package_rates', 'set_shipping_prices', PHP_INT_MAX, 1 );
function set_shipping_prices( $rates ) {
foreach ( $rates as $rate_id => $rate ) {
$rates[ $rate_id ]->cost = 50;
}
return $rates;
}</pre>
<p>我的問題是,由於我從api取得價格值,我需要將價格從api回應傳遞給在觸發過濾器時執行的set_shipping_prices函數。 </p>
這段程式碼未經測試,可能需要一些調整,但它可以是正確的路徑,使您的外部API呼叫有效。
我們可以嘗試使用WC_Session變數來設定我們想要傳遞的運費:
然後,我們可以在您的掛鉤函數中呼叫WC_Session變數:
但是,我們需要其他東西來刷新快取的運輸方法,以使其生效:
最後,我們取消設定WC Session變數(在結帳首次載入和感謝頁面上):
將程式碼放入您的子主題的functions.php檔案中(或外掛程式中)。它可能有效。
相關:在WooCommerce結帳中勾選自訂複選框後刪除運費