在允许重复的帖子ID中使用POST__

时间:2013-03-20 作者:KT.

我有一个按特定顺序排列的ID数组。我使用post__in 在我的查询中,从该数组获取帖子。我有一些重复的帖子ID,我需要在页面中显示两次,但查询似乎忽略了它们。假设数组如下所示

array values  = 1,2,3,4,2,5
当我将此数组传递给post__in, 它没有价值\'2\' 是我在数组中指定的两倍。是否有解决方法?

2 个回复
SO网友:kaiser

这种情况就像array( 1,2,3,4,2,5 ) 如下所示:

Array(
     0 => 1
    ,1 => 2
    ,2 => 3
    ,3 => 4
    ,4 => 2
    ,5 => 5
) [length = 6 ]
看起来还可以。但是当你看到WP_Query 对象,您将看到以下部分添加到查询字符串中:

" AND {$wpdb->posts}.ID IN ($post__in)"
这意味着每个帖子都将被提取一次。

结论

因此,除非您多次修改查询以包含帖子,否则您将只能在运行时执行此操作。

运行时配置可能性和内部x光透视每个基本循环如下所示:

if ( have_posts() )
{
    while( have_posts )
    {
        the_post();
        // do stuff
    }
}
现在global $post 指通过什么获取设置the_post(). 它基本上是$GLOBALS[\'wp_query\']->the_post();. 当你看到WP_Query::the_post() 方法,您会发现非常有趣的事情:

function the_post() {
    global $post;
    $this->in_the_loop = true;

    if ( $this->current_post == -1 ) // loop has just started
        do_action_ref_array(\'loop_start\', array(&$this));

    $post = $this->next_post();
    setup_postdata($post);
}
你看到了$this->next_post(); 呼叫。从内部看,这一个如下所示:

function next_post() {

    $this->current_post++;

    $this->post = $this->posts[$this->current_post];
    return $this->post;
}
因此,您可以看到循环所依赖的主要内容是current_post 柜台也可以从前端/a模板访问此模板。简单使用

$GLOBALS[\'wp_query\']->current_post
在帖子之间“跳转”。所以,如果你需要在帖子X之后重复一篇帖子,那么只需对照它进行检查,切换一轮,然后跳回。

SO网友:Tolea Bivol

您可以循环ID并调用get_postsetup_postdata :

global $post;
foreach ($ids as $id) :
    $post = get_post($id);
    setup_postdata( $post );
    the_title();
endforeach;

结束

相关推荐

WP_QUERY:按PHP变量排序

我的问题是:对于我的文章,我使用自定义的帖子类型“展览”,并发布所有其他新闻。我在一个查询中显示它们[\'post\\u type\'=数组(\'experiments\',\'posts\')]。这个orderby parameter 对于帖子应该是发布日期,对于展览应该是自定义元值(项目结束日期)。这样,帖子将按以下顺序显示:展览1(发布日期:2013年1月2日,结束日期:2013年4月4日)第1篇(发布日期:2013年3月13日)展览2(发布日期:2012年4月1日,结束日期:2013年3月1日)第