web-dev-qa-db-fra.com

Modifier la description du changement de statut d'un produit WooCommerce spécifique

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
1
iKamy

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 crochet save_post.

2
LoicTheAztec