Thème: le crochet pour remplacer l'obsolète “woocommerce_add_order_item_meta”
Besoin d'ajouter des méta aux postes de commande. Googlé et la plupart des articles est dit d'utiliser "woocommerce_add_order_item_meta" crochet. Ce crochet est obsolète dans la nouvelle version 2.3.7. Quelqu'un, s'il vous plaît dites-moi le crochet à utiliser à la place.
http://docs.woothemes.com/wc-apidocs/function-woocommerce_add_order_item_meta.html
OriginalL'auteur user3339988 | 2015-04-16
Vous devez vous connecter pour publier un commentaire.
Si vous regardez
wc-deprecated-functions.php
vous verrezFondamentalement, la fonction a été renommé
wc_add_order_item_meta()
, donc si vous avez besoin de la fonction de l'utiliser. Le action crochet n'a pas été renommé et reste dansclass-wc-checkout.php
:OriginalL'auteur helgatheviking
2017/2018 LE DROIT CHEMIN (à l'Aide de nouvelles CRUD setters et Getters méthodes)
Depuis thème 3, qui a amélioré beaucoup de choses à apporter des changements radicaux, l'action crochet
woocommerce_add_order_item_meta
fonctionnent toujours parfaitement, même dans le thème de la version 3.3+.Ce crochet est activé par
WC_Checkout
les méthodes de la classe et les fonctions connexes dans le processus de commande et pas dansWC_Order
Classe où panier de données n'est plus disponible.Voyons comment travailler avec
woocommerce_checkout_create_order_line_item
. Il a 4 arguments disponibles:$item
est une instance deWC_Order_Item_Product
nouveau introduit Classe$cart_item_key
est la cart unique de l'élément de clé de hachage$values
est le panier d'un article$order
une instance de la WC_Order objet (Ce qui est un très bon argument supplémentaire dans certains cas spécifiques)Dans ce crochet, nous allons remplacer les anciennes fonctions de travail wc_add_order_item_meta() par la nouvelle
WC_Data
update_meta_data()
méthode pour être utilisé avec$item
argument.Exemple:
Enfin, nous pouvons faire la même chose avec l'ancienne méthode, à l'aide de
woocommerce_add_order_item_meta
crochet car elle a presque les mêmes arguments utiles:Ça fonctionne bien, merci. Cependant, certains paramètres ne sont pas disponibles. Le
$order
paramètre n'a pas un ID par exemple, et apparemment on peut pas avoir la$item_id
ainsiDésolé, mais tous les paramètres sont disponibles: Pour obtenir le ID, il suffit d'utiliser
$order_id = $order->get_id();
et pour la ID de l'Élément tout simplement utiliser$item_id = $item->get_id();
...Merci pour les commentaires, mais j'ai zéro dans les deux cas. Et peut-être que cela a un sens. Lorsque
woocommerce_checkout_create_order_line_item
déclenchée, l'ordre n'a pas encore été créé. Suis-je le droit?La commande n'est pas enregistrée dans la base de données, comme la méthode
WC_Order
save()
est utilisé plus tard à la fin deWC_Checkout
create_order()
de la méthode.OriginalL'auteur LoicTheAztec
Il semble que le crochet est maintenant obsolète depuis la version 3.0.4.
Je suis de cet avis:
J'ai remplacé le nom de l'action 'woocommerce_add_order_item_meta' avec 'woocommerce_new_order_item" dans un add_action déclaration dans un plugin délinquance, et de la dépréciation de la notification disparaît, Le problème est que certains paramètres apparaissent maintenant à l'intérieur d'un
legacy_values
tableau. J'utilise le plugin YITH Thème Produit Add-Ons, et le produit de méta-données qui doivent être attachés à un ordre n'est pas capté par le plugin et donc pas stockées avec l'ordre. Donc, jusqu'à ce que ce problème est résolu dans le plugin que vous avez à vivre avec le retrait de la notification.woocommerce_new_order_item
de ne pas remplacerwoocommerce_add_order_item_meta
... alors est-ce une réponse? ou une question?...Gentiment, dans les deux cas, vous devez mettre à jour avec quelque chose de droit et testé ... ou de la supprimer si pas. MerciOK, pour être clair. Le crochet est obsolète et vous obtenez un des conseils de la dépréciation de message à utiliser un autre crochet. Mais comme @LoicTheAztec dit, ce crochet n'est pas une pièce parfaite, parce que les paramètres apparaissent différemment. Donc: ne pas suivre les conseils donnés dans l'autodérision message (sauf si vous avez le plein contrôle du code). J'essaie toujours de se débarrasser de toutes les notifications, mais dans ce cas je vais devoir vivre avec
OriginalL'auteur Christer Fernstrom
Je sais que cela a été répondu et il est accepté de répondre déjà. Je voulais juste donner une autre façon de gérer cela sans réellement obtenir un obsolète message (voir référence);
OriginalL'auteur Ilgıt Yıldırım
Votre cas d'utilisation spécifiques n'est pas très clair (vous n'avez pas préciser quand et où vous devez ajouter des méta-informations), mais vous pouvez utiliser
woocommerce_checkout_update_order_meta
lors de votre commande.Lire la suite dans personnalisation de la caisse des champs.
OriginalL'auteur rnevius
Je voulais ajouter à Ilgıt Yıldırım réponse: dans mon cas, mes valeurs n'existent pas dans l'article->legacy_values tableau. Pour remédier à cela, j'ai utilisé le woocommerce_checkout_create_order_line_item crochet pour ajouter les valeurs personnalisées à l'élément avant d'appeler le woocommerce_new_order_item crochet. Voici un exemple:
add_action( 'woocommerce_checkout_create_order_line_item', 'save_values_in_item', PHP_INT_MAX, 4 );
fonction save_values_in_item( $item, $cart_item_key, $valeurs, $ordre ) {
}
//PUIS d'appeler le nouveau crochet:
add_action( 'woocommerce_new_order_item', 'add_product_input_fields_to_order_item_meta_wc3', PHP_INT_MAX, 3 );
fonction add_product_input_fields_to_order_item_meta_wc3( $item_id, $item, $order_id ) {
}
OriginalL'auteur sc8704
Juste pour rendre les choses claires, cette fonction est obsolète, mais le crochet est toujours ok
OriginalL'auteur Pablo S G Pacheco
Pas, il semble que le crochet est également déconseillé:
Erreur PHP:
Le "woocommerce_add_order_item_meta" crochet d'utilisations en dehors de la date de structures de données et la fonction est obsolète depuis la version 3.1.2. Remplacer avec woocommerce_new_order_item.
Je ne peux pas le trouver ici:
https://docs.woocommerce.com/wc-apidocs/hook-docs.html
OriginalL'auteur tperschon