更新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结账中勾选自定义复选框后删除运费