Dynamische Möglichkeit, den Preis der Versandart in WooCommerce zu aktualisieren
P粉605233764
2023-08-13 18:08:43
<p>Ich versuche, die Versandpreise für meine Versandmethoden dynamisch zu aktualisieren. Ich erhalte den Versandpreis von der API und möchte den Preis aktualisieren, wenn ich den Preis erfolgreich von der API-Antwort erhalten habe. Ich verwende den folgenden Code: </p>
<pre class="brush:php;toolbar:false;">function handle_api_response( $rates ) {
//Der API-Aufrufcode ist hier.....
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 );
Funktion set_shipping_prices( $rates ) {
foreach ( $rates as $rate_id => $rate ) {
$rates[ $rate_id ]->cost = $price;
}
Rückgabepreise;
}
}</pre>
<p>Der obige Code funktioniert nicht, aber wenn ich den Filter aus der Funktion handle_api_response verschiebe und einen statischen Wert für die Gebühr festlege, scheint er zu funktionieren. So:</p>
<pre class="brush:php;toolbar:false;">function handle_api_response( $rates ) {
//Der API-Aufrufcode ist hier.....
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 );
Funktion set_shipping_prices( $rates ) {
foreach ( $rates as $rate_id => $rate ) {
$rates[ $rate_id ]->cost = 50;
}
Rückgabepreise;
}</pre>
<p>Mein Problem ist, dass ich, da ich den Preiswert von der API erhalte, den Preis von der API-Antwort an die Funktion set_shipping_prices übergeben muss, die ausgeführt wird, wenn der Filter ausgelöst wird. </p>
这段代码未经测试,可能需要进行一些调整,但它可以是正确的路径,使您的外部API调用有效。
我们可以尝试使用WC_Session变量来设置我们想要传递的运费:
然后,我们可以在您的挂钩函数中调用WC_Session变量:
但是,我们需要其他东西来刷新缓存的运输方法,以使其生效:
最后,我们取消设置WC Session变量(在结账首次加载和感谢页面上):
将代码放入您的子主题的functions.php文件中(或插件中)。它可能有效。
相关:在WooCommerce结账中勾选自定义复选框后删除运费