Commande complète basée sur une note de commande spécifique dans WooCommerce
Je souhaite créer un extrait de code qui complète une commande Woocommerce en fonction d'une note de commande spécifique («Statut de la commande Budbee: Livré»). J'utilise un hook pour ce faire et j'ai du code mais cela ne fonctionne pas. Quelqu'un peut-il m'aider s'il vous plaît? PHP n'est pas ma langue «native», donc je ne sais pas si et où j'ai commis des erreurs.
Deux questions principales sont:
- Est-ce que j'utilise le bon crochet
woocommerce_new_customer_note? - Mon code PHP est-il correct?
Ci-dessous le code:
add_action( 'woocommerce_new_customer_note', 'auto_complete_budbee_delivered' );
function auto_complete_budbee_delivered( $order_id, $customer_note ) {
if ($customer_note == "Budbee order status: Delivered") { $order = wc_get_order( $order_id ); $order->update_status( 'completed' );
}
}
Mille mercis!!
METTRE À JOUR
Je pense que j'ai choisi le mauvais crochet (note client, au lieu de note de commande). Cela pourrait être:
/**
* Action hook fired after an order note is added.
*
* @param int $order_note_id Order note ID. * @param WC_Order $order Order data.
*
* @since 4.4.0
*/
do_action( 'woocommerce_order_note_added', $comment_id, $this );
return $comment_id;
Le problème ici est que vous ne récupérez que le comment_id, et non le message ou order_id. Avez-vous une idée de la façon dont cela fonctionnerait pour obtenir le order_id et le contenu de la note? Cela provient du même document partagé par @LuicTheAztec. L' $thisobjet contient-il toutes les informations de commande?
Réponses
Mis à jour (supprimé incorrect $de la clé du tableau $args['customer_note']) .
Vous n'avez pas défini les arguments de la fonction de la bonne manière pour woocommerce_new_customer_note (voyez-le dans le code source du hook ) , alors essayez plutôt ce qui suit:
add_action( 'woocommerce_new_customer_note', 'auto_complete_budbee_delivered' );
function auto_complete_budbee_delivered( $args ) { if ( $args['customer_note'] == "Budbee order status: Delivered") {
$order = wc_get_order( $args['order_id'] );
$order->update_status( 'completed' );
}
}
Cela devrait mieux fonctionner maintenant.
Modifier (lié à votre question modifier) .
Ou vous feriez peut-être mieux d'utiliser à la place woocommerce_order_note_addedhook de cette façon:
add_action( 'woocommerce_order_note_added', 'auto_complete_budbee_delivered', 10, 2 );
function auto_complete_budbee_delivered( $comment_id, $order ) { $comment_obj = get_comment( $comment_id ); $customer_note = $comment_obj->comment_content; if ( $customer_note == "Budbee order status: Delivered") {
$order->update_status( 'completed' );
}
}
Cela peut fonctionner si le contenu de la note est exactement "État de la commande Budbee: Livré" .