我在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一起使用吗?我在互联网上看到的所有信息都表明它应该可行。对此有任何想法。
答案 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