2017-06-13 1 views
1

Dans mon plugin personnalisé (fonctionnant dans WooCommerce 2.6.x et 3.x), je dois obtenir l'ID de la commande lors de la création d'une nouvelle commande. J'ai essayé différents hooks mais ils ne fonctionnent que lorsque le client crée une commande et non quand une commande est créée depuis admin.WooCommerce crochet pour la création de commande de l'administrateur

J'ai essayé:

  • woocommerce_new_order
  • woocommerce_thankyou
  • woocommerce_checkout_order_processed
  • woocommerce_checkout_update_order_meta

Mise à jour

Enfin je ceci:

add_action('wp_insert_post', function($order_id) 
{ 
    if(!did_action('woocommerce_checkout_order_processed') 
     && get_post_type($order_id) == 'shop_order' 
     && validate_order($order_id)) 
    { 
     order_action($order_id); 
    } 
}); 

validate_order est:

function validate_order($order_id) 
{ 
    $order = new \WC_Order($order_id); 
    $user_meta = get_user_meta($order->get_user_id()); 
    if($user_meta) 
     return true; 
    return false; 
} 

Merci à validate_order l'action n'est pas exécutée lorsque vous commencez à créer l'ordre. J'utilise !did_action('woocommerce_checkout_order_processed') car je ne veux pas que l'action soit exécutée si la commande est créée par un client (j'ai une action spécifique pour cela, en utilisant woocommerce_checkout_order_processed).

+0

Nous espérons que vous l'obtiendrez: 'WC() -> order-> id;' – stevenkellow

Répondre

1

Si vous utilisez la page d'administration .../wp-admin/post-new.php?post_type=shop_order pour créer la nouvelle commande, il se peut qu'il n'y ait pas de hook WooCommerce pour ce faire car cette commande est créée par le core WordPress.

Cependant, l'action WordPress 'save_post_shop_order' sera appelée avec le $post_ID qui est l'identifiant de la commande.

Voir la fonction wp_insert_post() dans ...\wp-includes\post.php.

+0

Merci! L'action 'save_post_shop_order' est appelée lors de la création de la commande et à chaque mise à jour de la commande. C'est presque bon pour moi, mais y at-il une action que l'on appelle seulement quand la commande est créée? (peut-être '{$ new_status} _ {$ post-> post_type}' dans ... \ wp-includes \ post.php', mais 'new_shop_order' ne fonctionne pas) – Vixent

+0

L'action 'save_post_shop_order' a un paramètre booléen $ update qui sera faux lors de la création de la publication. –

+0

Ok. Le problème est que lorsque vous cliquez sur le bouton pour créer une commande depuis l'admin, avant de commencer à remplir les champs de commande, l'action 'save_post_shop_order' est appelée. Donc, je reçois un identifiant de commande d'une commande vide. En fait, si vous quittez la page de création de commande et que vous essayez de créer une nouvelle commande, l'ID de commande est une nouvelle valeur. Il serait préférable d'utiliser une action appelée uniquement lorsque l'administrateur clique sur le bouton 'Enregistrer/ajouter une commande' et que la commande est affichée dans la table des commandes. – Vixent

0

Vous pouvez utiliser ce crochet woocommerce_process_shop_order_meta est déclenché lorsqu'une commande est créée manuellement à partir de l'admin WordPress.