web-dev-qa-db-fra.com

Charger des commentaires par publication sur clic avec AJAX

Je travaille sur un thème qui utilise un curseur pour afficher les articles de blog. Sous le curseur se trouve une pagination qui s’affiche comme une timeline, avec une date au lieu d’un numéro de page, appelant le blog correspondant. Je souhaite afficher les commentaires de chaque publication, mais en dehors du curseur. Donc, j'ai ce code dans mon en-tête, pour obtenir les commentaires avec ajax:

:: EDITED (utilise maintenant wp-admin/admin-ajax.php pour traiter les requêtes, comme indiqué ci-dessous) ::

$(".timeline-entry a").live('click', function(event) {
  event.preventDefault();
  $.ajax({
     url: '<?php echo admin_url('admin-ajax.php'); ?>',
     type: 'POST',
     action: 'do_ajax',
     data: {
        'post_id' : '72' //using a post id that I *know* has comments, for testing!
     },
     dataType: "json",
     success: function(myResult) {
        alert(myResult);
     },
     error: function(error) {
        alert(error);
     }
  });
});

Dans mon functions.php:

add_action('wp_ajax_nopriv_do_ajax', 'retrieve_comments');
add_action('wp_ajax_do_ajax', 'retrieve_comments');

function retrieve_comments(){      
    $myPost = $_REQUEST['post_id'];
    $output = get_comments('post_id=' + $myPost);
    $output = json_encode($output);          
    if(is_array($output)){         
        print_r($output);             
    }          
    else{         
        echo $output;          
    }          
    die;
}; 

Je reçois 0 dans le message d'alerte ... cela signifie donc que l'ajax se produit, mais que quelque chose ne va pas avec ma fonction php, n'est-ce pas?

Merci de votre aide.

2
Amal

Aha, je pense que ma syntaxe était fausse.

J'ai changé:

 action: 'do_ajax',
 data: {
    'post_id' : '72' //using a post id that I *know* has comments, for testing!
 },

à:

data: {
    'action' : 'do_ajax',
    'post_id' : '72'
},

et je reçois la réponse correcte du console.log qui montre:

[{"comment_ID":"1","comment_post_ID":"1","comment_author":"Mr WordPress","comment_author_email":"","comment_author_url":"http:\/\/wordpress.org\/","comment_author_IP":"","comment_date":"2012-08-28 19:55:20","comment_date_gmt":"2012-08-28 19:55:20","comment_content":"Hi, this is a comment.<br \/>To delete a comment, just log in and view the post&#039;s comments. There you will have the option to edit or delete them.","comment_karma":"0","comment_approved":"1","comment_agent":"","comment_type":"","comment_parent":"0","user_id":"0"},{"comment_ID":"2","comment_post_ID":"72","comment_author":"Mr WordPress","comment_author_email":"","comment_author_url":"http:\/\/wordpress.org\/","comment_author_IP":"","comment_date":"2010-07-11 12:10:08","comment_date_gmt":"2010-07-11 12:10:08","comment_content":"Hi, this is a comment.<br \/>To delete a comment, just log in and view the post&#039;s comments. There you will have the option to edit or delete them.","comment_karma":"0","comment_approved":"1","comment_agent":"","comment_type":"","comment_parent":"0","user_id":"0"}

Alors maintenant, je trouve comment gérer au mieux le tableau :)

3
Amal

Votre fichier PHP n'est pas chargé dans le contexte de l'environnement WordPress, vous n'avez donc accès à aucune fonction WordPress. Voir AJAX dans les plugins dans le Codex pour savoir comment gérer correctement les appels AJAX dans WordPress, en particulier Ajax du côté de la visionneuse . Malgré le titre de la page, c’est également ainsi que AJAX devrait être traité dans les thèmes.

EDIT - Ceci est un bon tutoriel (lié au bas de la page Codex ci-dessus) pour donner un sens à WordPress AJAX .

0
Milo