1
votes

Quelle action précède le hook d'action `woocommerce_save_product_variation`?

Quelqu'un peut-il me dire quelle action précède le woocommerce_save_product_variation action woocommerce_save_product_variation ?

J'essaie d'enregistrer l'ancien prix et la quantité avant de mettre à jour la variante de produit


0 commentaires

3 Réponses :


1
votes

Dans meta-box / class-wc-meta-box-product-data.php line 530-541 vous pouvez trouver

/**
 * Set variation props before save.
 *
 * @param object $variation WC_Product_Variation object.
 * @param int $i
 * @since 3.8.0
 */
do_action( 'woocommerce_admin_process_variation_object', $variation, $i );

$variation->save();

do_action( 'woocommerce_save_product_variation', $variation_id, $i );

Alors woocommerce_admin_process_variation_object action précède woocommerce_save_product_variation


1 commentaires

Merci mais malheureusement ce crochet ne se déclenche pas en cliquant sur le bouton "Enregistrer les modifications" sur WooCommerce / Produits / Modifier le produit - Modifier la variante sélectionnée.



0
votes

Utilisez woocommerce_admin_process_variation_object

add_action('woocommerce_admin_process_variation_object', 'prefix_previous_variation_price', 10, 1);
function prefix_previous_variation_price($variation) {
   $previous_price = $variation->get_price();
}

Pour trouver ce type de hook, vous pouvez rechercher les fichiers source woocommerce. Par exemple pour ceci: je recherche le woocommerce_save_product_variation sur http://hookr.io/ . J'ai vu que ce hook s'appelait dans class-wc-meta-box-product-data.php . Ensuite, je regarde ce fichier et je trouve woocommerce_admin_process_variation_object hook qui sont appelés juste avant $variation->save();

Jetez un œil ici: https://github.com/woocommerce/woocommerce/blob/ac9f83d7724b889a1740d651eb4cd8ac5bb5b4f2/includes/admin/meta-boxes/class-wc-meta-box-product-data.php#L537


3 commentaires

Désolé, j'ai trouvé un problème .. et le problème est dans la version WooCommerce. Ma version est 3.8.1 et ce hook woocommerce_admin_process_variation_object est introduit dans la version 4.0.0


Vous ne pouvez pas mettre à jour woocommerce?


c'est la dernière option, à cause de toutes les autres dépendances.



0
votes

J'ai résolu avec woocommerce_variation_header .

Ce crochet sera activé pour chaque variante de produit. Par conséquent, vous devez disposer d'un tableau associatif privé au niveau de la classe, dans lequel vous stockerez (pour vous) des informations importantes sur le produit (variation), par exemple le prix, la quantité en stock, etc.

Après cela, enregistrez ce tableau dans db, c'est-à-dire. wp_options, avec un nom spécifique.

Lorsque vous appelez woocommerce_save_product_variation , appelez également array que vous avez déjà enregistré pour la même variation de wp_options et enfin comparez les données.

C'est ce dont j'avais besoin mais un détour et la raison de cette approche est que je devais rester sur la même ancienne version de WooCommerce.

Merci à tous pour votre participation!


0 commentaires