每个帖子在我的自定义查询中显示两次...?

时间:2011-02-28 作者:Lynne

我创建了一个自定义查询,以从自定义帖子类型中提取所有帖子,按评论计数排序。这是您的常规自定义查询:

 <?php

 $querystr = "
    SELECT wposts.* 
    FROM $wpdb->posts wposts, $wpdb->postmeta wpostmeta
    WHERE wposts.ID = wpostmeta.post_id 
    AND wposts.post_status = \'publish\' 
    AND wposts.post_type = \'Tutorials\' 
    ORDER BY wposts.comment_count DESC
 ";
 $tutorialposts = $wpdb->get_results($querystr, OBJECT);

 ?>

 <?php if ($tutorialposts): ?>
 <?php global $post; ?>
 <?php $i = 0; ?> 
 <?php foreach ($tutorialposts as $post): ?>
 <?php $i++; ?>
 <?php setup_postdata($post); ?>
<h2><?php echo $i ?>:&nbsp;<a href="<?php the_permalink() ?>" rel="bookmark" title="Permanent Link to <?php the_title(); ?>"> <?php the_title(); ?></a></h2>
 <?php endforeach; ?>
 <?php endif; ?>
它添加了一些代码来对帖子进行编号。但我删除了这段代码,同样的问题仍然存在。

它实际上做了它应该做的!事实上,它对做它应该做的事情非常兴奋,以至于它做了两次。

Screen shot of issue

还有,如果有人能告诉我如何解析这段代码,这样它只显示查询检索到的前10篇文章,那就太好了。但我自己可能会想出来,那只是我有点懒。

我真的只想知道为什么它会拉每个帖子并显示两次o.0

3 个回复
最合适的回答,由SO网友:Chris_O 整理而成

确实没有理由使用原始sql查询帖子。您可以使用WordPress API完成几乎任何类型的查询。完整参考请参见法典,Function Reference query posts. 请尝试以下操作:

global $post;

    $args=array(
    \'post_type\' => \'tutorial\',
    \'orderby\' => \'comment_count\',
    \'posts_per_page\' => 10
    );

   $posts= query_posts($args);

foreach ($posts as $post) :

//do stuff

endofforeach;

SO网友:wyrfel

你为什么要加入postmeta 如果你不在WHERE 也没有从中获得一块田地?

您的双重结果是因为您运行的是一个非独特的查询,并且由于您加入了Posteta,MySQL为每个Posteta记录提供了一个单独的记录,即使您只从posts.

所以要么放弃postmeta 加入或执行SELECT DISTINCT, 前者更好。

我同意Chris\\u O。。。如果可以的话,最好使用查询变量,因为WP会确保不会给自己带来这种麻烦。

SO网友:Lynne

我必须定义一些后期元字段(自定义字段、分类法或标记),并将其添加到查询选择中:

AND wpostmeta.meta_key = \'Platform\'
现在,它只显示每篇文章一次,但我现在只能在“教程”下为每篇文章的自定义字段“平台”定义一个值

结束

相关推荐

WordPress 2.9.2中使用WP Query时出现“ApacheHTTP服务已停止工作”

当我的脚本运行WP 2.9.2中下面的第4行时,它会导致我的web应用抛出“Apache HTTP服务已停止工作”错误$cat=get_cat_ID(\'top-menu\'); $catHidden=get_cat_ID(\'hidden\'); $myqueryCurrent = new WP_Query(); $myqueryCurrent->query(array(\'cat\'=>\"$cat,-$catHidden\",\'post__not_in\'=&g