WordPress查询(简码)始终返回第一篇文章



我已经在我的插件中制作了一个简码,效果很好.简码需要采用一些参数并创建一个带有输出的自定义循环。

其中一个参数是输出循环的帖子数($markers)

$args=array(
                'meta_key'=>'_mykey',
                'post_status'=>'publish',
                'post_type'=>'post',
                'orderby'=>'date',
                'order'=>'DESC',
                'posts_per_page'=>$markers,
);
  $wp_query = new WP_Query();
           $wp_query->query($args);
if ($wp_query->have_posts()) : while (($wp_query->have_posts()) ) : $wp_query->the_post();
// do the loop using get_the_id() and $post->id
endwhile;endif;
wp_reset_query();//END query

在访问时,我需要从所有帖子中获得数据($markers = '-1' )有时只需要一个($markers = '1' )或多个($markers = 'x').

所有这些都在单个页面/帖子上工作得很好 - 但我的问题是,当这个函数位于我有多个帖子 (!is_single) 和 ( $ markers = '1' )的地方时,它将始终返回 LATEST 帖子的数据,而不是正确的..(例如,在默认的WordPress主题中,它将显示10个帖子 - 它们都是相同的数据)

这显然是$post->ID的问题 - 但是在 wp 循环之外进行自定义循环时,我如何拥有正确的帖子 ID?

我试图通过以下方式解决这个问题

global $post;
 $thePostIDtmp = $post->ID; //get the ID before starting new query as temp id
 $wp_query = new WP_Query();
 $wp_query->query($args);
// Start Custom Loop
if (!is_single()){
$post_id_t = $thePostIDtmp;}
else {
$post_id_t = $post->ID;}

然后使用$post_id_t - 但它似乎不起作用,我不应该使用 get_the_id() 吗?还是我不应该使用查询(并使用get_posts)??

任何想法/

解决方案/想法??

我会使用query_posts(http://codex.wordpress.org/Function_Reference/query_posts)而不是覆盖$wp对象。您应该能够在页面上包含任意数量的循环。 如果您对此有疑问,可以使用: http://codex.wordpress.org/Function_Reference/wp_reset_query 就在你调用它之前。

我发现这个:http://blog.cloudfour.com/wordpress-taking-the-hack-out-of-multiple-custom-loops/也减轻了一点痛苦。

WordPress中基本上有两种查询帖子:那些改变主循环的帖子和那些不改变主循环的帖子。如果要更改主循环,例如用于显示类别存档页面的循环,请使用query_posts。它让你做到这一点。删除、更改和附加默认查询的参数以更改典型页面的结果。不过,query_posts有一些缺点。

然后有一些查询仅用于从数据库中获取内容以进行处理,例如在侧边栏中显示最新的帖子标题或当前帖子的附件。

为此,创建一个新的 WP_Query 对象,该对象将独立于主循环构建自定义循环,如下所示:

// The Query
$the_query = new WP_Query( $args );
// The Loop
while ( $the_query->have_posts() ) : $the_query->the_post();
    echo '<li>';
    the_title();
    echo '</li>';
endwhile;
// Reset Post Data
wp_reset_postdata();

然后是get_posts(),它就像WP_Query的小弟弟。在我看来,它具有更简单的界面,并返回一个数组,其中包含更易于使用的结果。它看起来像这样:

$myposts = get_posts( $args );
foreach($myposts as $post) : setup_postdata($post);
     echo "<li>";
     the_title();
     echo "</li>";
endforeach;

在 foreach 模板中,像 get_the_id() 这样的标签将起作用。

最新更新