Я хотел бы знать, как изменить способ, которым WordPress отображает комментарии на странице. Существующее требование состоит в том, чтобы отобразить определенное количество комментариев в списке комментариев, и пока пользователь прокручивает список комментариев до конца (не на странице), новый набор комментариев будет добавлен к списку комментариев (если есть еще комментарии, которые нужно отобразить).
У меня есть следующий код для вызова отображаемых комментариев:
<?php
require_once("../../../wp-config.php");
$page = $_GET['cpage'];
if(isset($page))
{
echo loadComments($page);
}
function loadComments($page=1)
{
global $wpdb;
$number=5;
$result='';
// get comments from WordPress database
$numRows = $wpdb->get_var("SELECT COUNT(*)
FROM $wpdb->comments
WHERE comment_approved = '1'
AND NOT (comment_type = 'pingback' OR comment_type = 'trackback')");
if ($numRows > $number)
{
$nav=1;
$pages=ceil($numRows/$number);
}
else {
$nav=0;
$pages=0;
}
$getnumber=$number*$page;
// get comments from WordPress database
$comments = $wpdb->get_results("SELECT * FROM $wpdb->comments
WHERE comment_approved = '1'
AND NOT (comment_type = 'pingback' OR comment_type = 'trackback')
ORDER BY comment_date_gmt ASC
LIMIT $getnumber");
$comments=array_slice($comments, $getnumber-$number, $number);
if ( $comments )
{
$count=1;
// display comments one by one
foreach ($comments as $comment)
{
if ($page <= $pages)
{
$result.= '<li id="comment-'.$comment->comment_ID.'" class="leftcolumn"><div class="commenttext"><div style="padding:20px 0 0 10px;"><img src="/wp-content/themes/twentyten/images/headers/ImgQuotationMarkOpen.gif" alt="" title="" class="openarrow" />'.
'</div><div style="padding:0 10px 0 40px;"><p>'.$comment->comment_content.'</p></div>'.
'<div style="padding:0 10px 0 0; text-align:right;"><img src="/wp-content/themes/twentyten/images/headers/ImgQuotationMarkClose.gif" alt="" title="" style="border:0;" class="closearrow"/></div>'.
'</div></li>'.'<li class="middlecolumn"><img src="/wp-content/themes/twentyten/images/headers/ImgBubbleTopRight.gif" class="pointerarrow" /></li>'.
'<li class="rightcolumn" id='.$comment->comment_ID.'">'.'<div style="padding:25px 0 0 10px; line-height:10px;" class="commenttextright">'.
'<span class="author" style="text-decoration:none;">'.$comment->comment_author.'</span><div style="height:5px;"></div>'.
'<span style="font-family:Arial; font-size:12px;">'.mysql2date('j-n-Y',$comment->comment_date).'</span>'.
'</div></li><div style="clear:both;"></div><div style="height:10px;"></div>'.
'<div style="height:1px; border-bottom:1px dashed #3e3e3e;"></div><div style="height:10px;"></div>';
$count++;
}
else
{
$result = '';
}
}
}
return $result;
}
?>
и это вызов ajax для добавления нового набора комментариев:
function updatestatus(){
//Show number of loaded items
var totalItems=$('.commentlist li div.commenttext').length;
$('#status').text('Loaded '+totalItems+' Items');
}
function scrollalert(){
var scrolltop=$('.commentlist').attr('scrollTop');
var scrollheight=$('.commentlist').attr('scrollHeight'); //825
var windowheight=$('.commentlist').attr('clientHeight'); //600
var scrolloffset=20;
//alert(scrolltop);
if(scrolltop >= (scrollheight - (windowheight + scrolloffset)))
{
//fetch new items
if (count > 0 )
{
count++;
$('#status').text('Loading more items...');
$.get('/wp-content/themes/twentyten/commentloader.php?cpage='+count, '', function(newitems){
if (newitems != '')
{
$('.commentlist').append(newitems);
updatestatus();
}
else
{
// prevent from appending content
count = -1;
}
});
}
else
{
$('#status').text('No more items to load...');
}
}
setTimeout('scrollalert();', 1500);
}
Я попытался добавить два файла в папку тем и добавить ссылку на файл header.php для файла js. Это работает, но мне нужно включить пейджинг для комментариев и скрыть навигацию. Если бы вы могли предоставить лучший способ достижения (может быть, создать плагин?), Я был бы очень признателен. Я новичок в WordPress и буду рад, если вы поведете меня в правильном направлении.
Спасибо, РНорбе
WordPress имеет собственную и очень специфическую реализацию Ajax, загрузка ядра для этого делает это неправильно.
Начните с чтения AJAX в плагинах Codex.
Спасибо, я читаю это сейчас. Знаете ли вы какие-либо другие ссылки, в которых есть руководство по созданию плагинов?