Manière dynamique de mettre à jour le prix du mode d'expédition dans WooCommerce
P粉605233764
2023-08-13 18:08:43
<p>J'essaie de mettre à jour dynamiquement les prix d'expédition pour mes méthodes d'expédition. Je reçois le prix d'expédition de l'API et je souhaite mettre à jour le prix lorsque j'obtiens avec succès le prix de la réponse de l'API. J'utilise le code suivant : </p>
<pre class="brush:php;toolbar:false;">function handle_api_response( $rates ) {
//Le code d'appel de l'API est ici.....
si ($response_code === 200){
$response_data = json_decode($response, true);
$prix = $response_data['expéditions']
}
add_filter( 'woocommerce_package_rates', 'set_shipping_prices', PHP_INT_MAX, 1 );
fonction set_shipping_prices( $rates ) {
foreach ( $rates comme $rate_id => $rate ) {
$rates[ $rate_id ]->cost = $price;
}
retourner les taux $ ;
}
}</pré>
<p>Le code ci-dessus ne fonctionne pas, mais si je déplace le filtre hors de la fonction handle_api_response et que je définis une valeur statique pour les frais, cela semble fonctionner. Comme ceci : </p>
<pre class="brush:php;toolbar:false;">function handle_api_response( $rates ) {
//Le code d'appel de l'API est ici.....
si ($response_code === 200){
$response_data = json_decode($response, true);
$prix = $response_data['expéditions']
}
}
add_filter( 'woocommerce_package_rates', 'set_shipping_prices', PHP_INT_MAX, 1 );
fonction set_shipping_prices( $rates ) {
foreach ( $rates comme $rate_id => $rate ) {
$rates[ $rate_id ]->coût = 50 ;
}
retourner les taux $ ;
}</pré>
<p>Mon problème est que puisque j'obtiens la valeur du prix de l'API, je dois transmettre le prix de la réponse de l'API à la fonction set_shipping_prices qui s'exécute lorsque le filtre est déclenché. </p>
Ce code n'a pas été testé et peut nécessiter quelques ajustements, mais il peut être le bon chemin pour faire fonctionner vos appels d'API externes.
Nous pouvons essayer d'utiliser la variable WC_Session pour définir les frais d'expédition que nous souhaitons facturer :
Nous pouvons alors appeler la variable WC_Session dans votre fonction hook :
Cependant, nous avons besoin d'autre chose pour actualiser la méthode d'expédition mise en cache afin qu'elle prenne effet :
Enfin, nous désactivons la variable WC Session (à la caisse, premier chargement et page de remerciement) :
Mettez le code dans le fichier function.php de votre thème enfant (ou dans un plugin). Cela peut fonctionner.
Connexe : Supprimez les frais d'expédition après avoir coché la case personnalisée dans la caisse WooCommerce