0

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

参数之一是为 ($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')的地方时,它总是会返回最新帖子的数据,而不是对于正确的..(例如在默认的 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)?

任何想法/解决方案/想法?

4

2 回答 2

1

我会使用 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/ 也减轻了一些痛苦。

于 2012-04-22T08:39:40.637 回答
0

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;

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

于 2012-04-22T15:49:46.450 回答