Загружать комментарии за сообщение при нажатии с помощью AJAX

Я работаю над темой, которая использует слайдер для отображения сообщений в блоге. Под слайдером отображается разбиение на страницы, которое отображается как временная шкала, с указанием даты вместо номера страницы, называя соответствующее сообщение в блоге. Я хочу отображать комментарии для каждого сообщения, но вне слайдера. Итак, у меня есть этот код в моем заголовке, чтобы получить комментарии с помощью ajax:

:: EDITED (теперь используется wp-admin / admin-ajax.php для обработки запроса, как указано ниже) ::

$(".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); } }); }); 

В моих 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; }; 

Я получаю 0 в поле предупреждения … так что означает, что ajax происходит, но что-то не так с моей php-функцией, правильно?

Спасибо за вашу помощь.

Ага, я думаю, что мой синтаксис был неправильным.

Я изменился:

  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' }, 

и я получаю правильный ответ от console.log который показывает:

 [{"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"} 

Итак, теперь я выясняю, как лучше всего обрабатывать массив 🙂

Ваш PHP-файл не загружается в контексте среды WordPress, поэтому у вас нет доступа к функциям WordPress. См. AJAX в плагинах в Codex для правильного способа обработки вызовов AJAX в WordPress, особенно Ajax на стороне просмотра . Несмотря на название страницы, это также то, как AJAX следует обрабатывать в темах.

EDIT – это хороший учебник (связанный внизу страницы Codex) для понимания возможностей WordPress AJAX.