Je souhaite écrire un plug-in personnalisé qui exécute une action une fois la commande woocommerce terminée, mais je ne parviens pas à faire fonctionner ce raccordement. Je peux voir cette question posée à plusieurs reprises.
Ici: https://wordpress.org/support/topic/woocommerce_order_status_completed-is-not-working
Et ici: https://wordpress.org/support/topic/woocommerce_order_status_completed-action-hook-not-working
Mais je ne peux pas m'en empêcher avec les réponses que ces gars-là ont reçues.
J'ai essayé d'ajouter l'action de différentes manières:
add_action( 'woocommerce_order_status_completed', 'ikwoocommerceorderstatuscompleted_func');
add_action( 'woocommerce_order_status_completed', array($this,'ikwoocommerceorderstatuscompleted_func'), 10, 1);
add_action( 'woocommerce_order_status_completed', array(&$this,'ikwoocommerceorderstatuscompleted_func'), 10, 1);
Aussi essayé avec une classe:
class IKHooks {
function __construct() {
add_action( 'woocommerce_order_status_completed', array($this,'ikwoocommerceorderstatuscompleted_func'), 10, 1);
}
public function ikwoocommerceorderstatuscompleted_func( $order_id ) {
}
}
J'ai même essayé de mettre l'action en dehors de la classe:
add_action( 'woocommerce_order_status_completed', array(IKHooks,'ikwoocommerceorderstatuscompleted_func'), 10, 1);
Aucun de ces exemples ne fonctionne. :(
Suivez les étapes pour vérifier avant que votre propre crochet ne s'appelle.
Vérifiez, lorsque vous terminez la commande, si vous avez reçu un e-mail relatif à l'achèvement de la commande, fournissez par défaut des e-mails woocommerce dans les paramètres de votre tableau de bord administrateur.
Hook est enregistré correctement dans le fichier plug-in ou le thème functions.php
Vérifiez votre action de registre woocommerce_order_status_completed after est enregistré correctement En procédant de la sorte
add_action( 'woocommerce_order_status_completed', 'callback_function_name' );
global $wp_filter; // test is register action name with callback function
print_r($wp_filter); exit;
check in array votre nom de fonction est enregistré avec ce hook
[woocommerce_order_status_completed] => Array
(
[10] => Array
(
[wc_paying_customer] => Array
(
[function] => wc_paying_customer
[accepted_args] => 1
)
[wc_downloadable_product_permissions] => Array
(
[function] => wc_downloadable_product_permissions
[accepted_args] => 1
)
[callback_function_name] => Array
(
[function] => callback_function_name
[accepted_args] => 3
)
)
)
Lorsque vous trouvez une fonction de rappel dans un tableau, elle fonctionne alors que quelque chose ne se pose pas dans les autres plugins ou le fichier functions.php du thème. La chaîne de recherche dans le plugin entier ou dans le thème function.php a appelé remove_action ou remove_all_actions.
Vous pouvez également vérifier de cette façon
add_action( 'woocommerce_order_status_completed', 'callback_function_name', 1);
Changer la priorité de la fonction 10 en 1 signifie que votre fonction appellera bientôt toutes les autres fonctions de rappel enregistrées auprès de ce hook.
Désolé pour le mauvais anglais.
Vous pouvez utiliser ce crochet
add_action( 'woocommerce_order_status_changed', 'your_function', 99, 3 );
Et la fonction ressemblera à
function your_function( $order_id, $old_status, $new_status ){
if( $new_status == "completed" ) {
//your code here
}
}
J'espère que cela vous sera utile.
J'ai fait face au problème similaire plus tôt et l'ai résolu comme suit:
Après le code, mettez à jour le statut de la commande sous la forme completed
add_action( 'woocommerce_thankyou', 'your_wc_autocomplete_order' );
function your_wc_autocomplete_order( $order_id ) {
if ( ! $order_id ) {
return;
}
$order = wc_get_order( $order_id );
$order->update_status( 'completed' );
}
Une fois que la commande est terminée, si vous voulez faire quelque chose, voyez le code suivant:
add_action('woocommerce_order_status_completed','payment_complete');
function payment_complete($order_id)
{
//global $items;
//$order = new WC_Order($order_id);
// do something ...
}
Espérons que ça va marcher :)
Essayez d'utiliser l'action hook woocommerce_order_status_changed
. Il faut 3 paramètres. identifiant de commande , ancien statut et nouveau statut . Référence de code supplémentaire ICI
Cela peut ne pas être exactement adapté à vos besoins, mais semble être une alternative intéressante. J'espère que cela t'aides.
woocommerce_order_status_changed
et woocommerce_order_status_completed
fonctionnent réellement pour moi. Après avoir lutté pendant 2 jours, je me suis rendu compte que vous ne pouvez pas utiliser var_dump, var_export ou print_r ni quoi que ce soit dans le panneau d'administration, cela ne fonctionnera tout simplement pas.
Donc, si vous êtes un débutant comme moi et que vous pensez que ces actions ne fonctionnent pas, essayez simplement de déclencher une autre action, comme envoyer un courrier par exemple.
Ce code fonctionne:
function your_function( $order_id ){
$order = new WC_Order( $order_id );
$to_email = '[email protected]';
$payment = $order->get_payment_method_title();
$headers = 'From: Your Name <[email protected]>' . "\r\n";
wp_mail($to_email, 'subject', $payment, $headers );
}
add_action( 'woocommerce_order_status_completed', 'your_function');
Je pense que vous pourriez être après ce gars. woocommerce_payment_complete
function mysite_woocommerce_payment_complete( $order_id ) {
error_log( "Payment has been received for order $order_id", 0 );
}
add_action( 'woocommerce_payment_complete', 'mysite_woocommerce_payment_complete' );