Dans WooCommerce, lorsque j'ajoute quelques lignes de code pour modifier la description du produit, lors du changement d'état du produit, le site Web génère une erreur lors de la soumission (sauvegarde) .
Mon code:
add_action('transition_post_status', 'new_product_add', 10, 3);
function new_product_add($new_status, $old_status, $post) {
if(
$old_status != 'publish'
&& $new_status == 'pending'
&& !empty($post->ID)
&& in_array( $post->post_type,
array( 'product')
)
) {
$term = get_term_by('name', 'فروش پیج اینستاگرام', 'product_cat');
wp_set_object_terms($post->ID, $term->term_id, 'product_cat', true);
/******************************/
$product = wc_get_product($post->ID);
$product->set_description("something");
$product->save();
/******************************/
}
}
comme vous le voyez, ces 3 dernières lignes entraînent le problème que la page actualise et met également à jour la description du produit mais donnez-moi et erreur
"LE SITE IS EXPÉRIENCE DES DIFFICULTÉS TECHNIQUES"
et quand je les supprime, ça fonctionne bien et montrez-moi le message réussi
MISE À JOUR
J'ai changé ces 3 lignes avec Wordpress way
wp_update_post( array('ID' => $post->ID, 'post_content' => "something"));
faire toujours le travail, mais au lieu d'un message réussi me donne cette erreur technique
MISE À JOUR II
Lorsque j'ouvre la console Chrome console, je vois également cette erreur
Failed to load resource: the server responded with a status of 500 () (index):1
Pour éviter une boucle infinie sur le crochet transition_post_status
Lors de l'utilisation de wp_update_post()
, essayez:
add_action('transition_post_status', 'new_product_add', 10, 3);
function new_product_add($new_status, $old_status, $post) {
if(
$old_status != 'publish'
&& $new_status == 'pending'
&& !empty($post->ID)
&& $post->post_type === 'product'
) {
$term = get_term_by('name', 'فروش پیج اینستاگرام', 'product_cat');
wp_set_object_terms($post->ID, $term->term_id, 'product_cat', true);
// unhook this function so it doesn't loop infinitely
remove_action( 'transition_post_status', 'new_product_add', 10 );
wp_update_post( array('ID' => $post->ID, 'post_content' => "something"));
// re-hook this function
add_action( 'transition_post_status', 'new_product_add', 10, 3 );
}
}
Ou:
add_action('transition_post_status', 'new_product_add', 10, 3);
function new_product_add($new_status, $old_status, $post) {
if(
$old_status != 'publish'
&& $new_status == 'pending'
&& !empty($post->ID)
&& $post->post_type === 'product'
) {
$term = get_term_by('name', 'فروش پیج اینستاگرام', 'product_cat');
wp_set_object_terms($post->ID, $term->term_id, 'product_cat', true);
$product = wc_get_product($post->ID);
// unhook this function so it doesn't loop infinitely
remove_action( 'transition_post_status', 'new_product_add', 10 );
$product->set_description("something");
$product->save();
// re-hook this function
add_action( 'transition_post_status', 'new_product_add', 10, 3 );
}
}
Cela peut résoudre votre problème.
Ceci est documenté ici sur
wp_update_post()
pour le crochetsave_post
.