web-dev-qa-db-fra.com

WordPress ne répond plus après avoir appelé wp_update_comment ()

Dans la page "Modifier le commentaire" du panneau d'administration, pour une raison quelconque, après avoir cliqué sur "Mettre à jour", la page Modifier se met en boucle et se charge en boucle infinie (l'icône de rotation de l'onglet Google Chrome ne cesse de tourner). Mon ordinateur entre dans une "réflexion approfondie" pendant 10 à 20 minutes, même après la fermeture de WordPress, du navigateur Web et de mon IDE (je travaille localement sur Microsoft WebMatrix 3).

Appeler wp_update_comment() semble être le problème, car lorsque je le supprime, tout fonctionne correctement. Lorsque je vérifie la base de données, je constate que la colonne 'comment_type' est bien mise à jour, mais mon ordinateur continue à utiliser une ressource consommant beaucoup de ressources et la page Modifier se charge de manière infinie.

function update_product_comment($comment_ID) {
    $commentarr = [];
    $commentarr['comment_ID'] = $comment_ID;
    $commentarr['comment_type'] = 'test';

    //wp_die(var_dump($commentarr['comment_type'])); <-- COMMENT_TYPE = 'TEST', SO FAR SO GOOD!
    wp_update_comment($commentarr); // <--- THE CULPRIT
}
add_action('edit_comment', 'update_product_comment');

Je ne sais pas ce qui pourrait provoquer wp_update_comment (), je n'ai pas de plug-in installé et une installation WordPress fondamentalement récente, un thème wordpress par défaut et aucun code personnalisé. Mais le même problème s'applique quel que soit le thème que j'utilise. Peut-être que c'est WebMatrix, je ne sais pas, quelqu'un peut-il tester le code et me dire s'il fonctionne?

2
Blastercloud

wp_update_comment déclenche l'action edit_comment ( source ), vous créez une boucle infinie.

2
Milo

Supprimez simplement le crochet d’action situé au début de votre fonction de rappel pour éviter la boucle infinie. Pour cela, vous pouvez ajouter:

// avoid infinite loop
remove_action( 'edit_comment', 'update_product_comment' );

Pourrait être fait alternativement comme ceci:

// avoid infinite loop
remove_action( 'edit_comment', __FUNCTION__ );

Une autre variante serait:

// avoid infinite loop
remove_action( current_action(), __FUNCTION__ );

Juste pour noter que, une seule des variantes ci-dessus est nécessaire.

0
Nicolai