【发布时间】:2011-09-10 00:18:30
【问题描述】:
【问题讨论】:
标签: wordpress
【问题讨论】:
标签: wordpress
我已经回答了类似的问题here,但我会总结一下我认为对您有帮助的内容。它将涉及自定义查询,您可以详细了解here。
您可以使用单独的“div”元素按不同的方法对每个帖子进行排序。然后您可以使用 jQuery 将它们全部隐藏(除了说“最近的”面板)。然后,当用户使用 jQuerys .click() 事件处理程序单击它(隐藏所有其他元素)时,您可以使用链接显示相关的“div”元素。
要使用按各种方法排序的帖子填充每个“div”元素,您可以使用自定义查询。例如,要按 cmets 的数量排序,请在“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' 方法对帖子进行了“重新排序”。单击链接后,您将被发送到同一页面,但获取变量不同(例如:recent=true、commented=true)。该页面包含一系列 php if 语句,用于确定帖子应如何排序,具体取决于哪个 GET 变量设置为“true”。
这比不需要 jQuery(或者实际上打开了 javascript)具有优势 - 它不会一次加载所有三种排序方法 - 只加载它需要的一种。
【讨论】:
<?php get_most_commented(15);?>上面<?php if (have_posts()) : $count = 0; ?> <?php while (have_posts()) : the_post(); $count++; ?> <!-- search item -- > <?php endwhile; else: ?> <?php endif; ?>(存档/搜索页面)我看不到搜索/存档页面(search.php)的任何变化?
<?php query_posts('meta_key=post_views_count&orderby=meta_value_num&posts_per_page=3&order=DESC'); if ( have_posts() ) : while ( have_posts() ) : the_post(); ?> 我想在排序帖子查询中添加“观看次数最多”(post_views_count)选项卡以及“评论次数最多”请帮助我,我会尝试很困惑:)
我明白你现在在追求什么。在阅读了一下之后,我意识到了一种更好的(最好的?)方法。这与我的第一个答案完全不同,因此我将其作为第二个答案发布。
我已经写了一个详细的教程here。简而言之,您定义指向您所在页面的链接,但使用 GET 变量告诉 WordPress 以某种方式对帖子进行排序。默认情况下,WordPress 按日期排序,但附加
?&orderby=comment_count&order=desc
到 url 它会以不同的方式对其进行排序(在这种情况下按 cmets 的数量)。帖子视图有点不同,因为这是一个自定义字段(您仍然需要 wp-post 视图插件)。
希望这会有所帮助!
【讨论】: