答案 0 :(得分:1)
我已经回答了类似的问题here,但我会总结一下我认为会对你有所帮助的问题。它将涉及自定义查询,您可以了解有关here的更多信息。
您可以使用单独的“div”元素按不同方法对每个帖子进行排序。然后你可以使用jQuery来隐藏它们(除了说'最近'的面板)。然后,当用户使用jQuerys .click()事件处理程序单击它时(隐藏所有其他元素),您可以使用链接显示相关的“div”元素。
要使用您使用自定义查询的各种方法排序的帖子填充每个“div”元素。例如,要按注释数量排序,请在'functions.php'文件中定义此函数。
function get_most_commented($limit=10) {
global $wpdb;
$most_commented = $wpdb->get_results("SELECT comment_count, ID, post_title FROM $wpdb->posts WHERE post_type='post' AND post_status = 'publish' ORDER BY comment_count DESC LIMIT 0 , $limit");
foreach ($most_commented as $post) {
setup_postdata($post);
$id = $post->ID;
$post_title = $post->post_title;
$count = $post->comment_count;
$output .= '<li><h1><a href="'. get_permalink($id).'">'.$post_title.' - '.$count.' comments</a></h1> post_excerpt;</li>';
}
return $output;
}
然后你在上面的相关'div'元素内调用函数:
<?php echo get_most_commented(15) ?>
在有序/无序列表中(显示最多评论的15个帖子)。这个例子只输出标题和摘录,但你可以改变HTML,并使用一些CSS样式来获得你想要的。
希望这有帮助!你激励我现在写一篇关于这个的教程!
修改: 我刚看了你给出的Nettuts示例 - 他们使用php'GET'方法重新排序帖子。单击链接后,您将被发送到同一页面但具有不同的get变量(例如:recent = true,commented = true)。该页面包含一系列php if语句,用于确定如何根据哪个GET变量设置为“true”来对帖子进行排序。
这比不需要jQuery(或者确实启用了javascript)更有优势 - 并且它不会同时加载所有三种排序方法 - 只需要它所需的一种方法。
答案 1 :(得分:1)
我现在看到你的样子。读了一下之后,我意识到了更好(最好?)的方式。对我的第一个答案来说,这是一种完全不同的方法,所以我将其作为第二个答案发布。
我写了详细的教程here。简而言之,您可以定义指向您所在页面的链接,但使用GET变量可以告诉WordPress以某种方式对帖子进行排序。默认情况下,WordPress按日期排序,但附加
?&orderby=comment_count&order=desc
到url它将以不同的顺序排序(在这种情况下按注释数量)。发布视图有点不同,因为这是一个自定义字段(你仍然需要wp-post views插件)。
希望这有帮助!