我已经在我的插件中制作了一个简码,效果很好.简码需要采用一些参数并创建一个带有输出的自定义循环。
其中一个参数是输出循环的帖子数($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() 这样的标签将起作用。