WP_Query'post__在CustomPost类型无法正常工作

时间:2017-11-15 22:28:10

标签: wordpress

我在WordPress中有一个名为event的自定义帖子类型。有几百个类型事件的帖子,但是两个例子的ID为760和1545。

此代码适用并返回包含正确单个帖子的格式列表:

    $args = array( 'p' => '760', 'post_type' => 'event' );
    $query = new WP_Query($args);
    if ( $query->have_posts() ) :

        $output .= '<ul class="postlist">';
        while ( $query->have_posts() ) :
            $query->the_post();
            $output .= '<li>';
            $output .= '<a href="'.get_the_permalink(get_the_ID()).'" id="'.get_the_ID().'">'.get_the_title().'</a>';
            if ( $excerpt) {
                $output .= '<p>'.get_the_excerpt().'</p>';
            }
            $output .= '</li>';
        endwhile;
        $output .= '</ul>';


    endif;
    wp_reset_postdata();
    echo $output;

如果我按以下示例修改查询,则不会返回任何内容。这些修正案中没有任何内容会返回任何内容:

    $args = array( 'post__in' => array('760','1545'), 'post_type' => 'event' );
    $args = array( 'post__in' => array('760'), 'post_type' => 'event' );
    $args = array( 'post__in' => array('760','1545'));

请注意,第二个ID确实可以正常运行,因此我已经验证了帖子的存在并且可以单独查询:

$args = array( 'p' => '1545', 'post_type' => 'event' );

所以我的问题是这个,我可以将自定义帖子类型与post__in一起使用吗?我在互联网上看到的所有信息都表明它应该可行。对此有任何想法。

1 个答案:

答案 0 :(得分:1)

问题在于,由于某种原因,我要查询的帖子已经准备好了。这只会在使用post__in时影响WP_Query,这会检查帖子是否已发布状态

使用post__in时WordPress生成的查询如下所示:

SELECT SQL_CALC_FOUND_ROWS wp_posts.ID
FROM wp_posts 
WHERE 1=1 
AND wp_posts.ID IN (760,1545)
AND wp_posts.post_type = 'event'
AND (
    wp_posts.post_status = 'publish'
    OR wp_posts.post_status = 'private'
) 
ORDER BY wp_posts.post_date DESC  

为“&#39; p&#39;参数看起来像这样,没有其他状态过滤器:

SELECT wp_posts.*
FROM wp_posts 
WHERE 1=1 
AND wp_posts.ID = 760
AND wp_posts.post_type = 'event' 
ORDER BY wp_posts.post_date DESC