我已注册CPT并创建archive-myCPT.php, 在这里,我想从主循环中排除一个特定的帖子。
这是我的代码:
<?php
$query = new WP_Query( array(
\'post_type\' => \'cpt\',
\'orderby\' => \'date\',
\'order\' => \'DESC\',
\'posts__not_in\' => array( 118 ),
\'posts_per_page\' => 1
) );
if( $query->have_posts() ){
// normal blog layout
$x = 1;
while ( $query->have_posts() ){
$query->the_post();
if ( 0 === (int) $post->post_parent ) {
get_template_part( \'inc/post-format/content-debate\');
}
........................
所有其他参数都按预期工作,但
\'posts__not_in\' => array( 118 ),
不起作用,我仍然能看到。
我做错了什么?
谢谢
UPDATE:
这是我在循环中使用的更相关的代码:
<?php
if( have_posts() ){
// normal blog layout
$x = 1;
while ( have_posts() ){
the_post();
if ($post->ID != 118) {
get_template_part( \'inc/post-format/content-debate\');
}
// advertising between posts
if($ad_posts_mode != \'none\'){
// take into account ad frequency
if (($x % $ad_posts_frequency) == 0){
switch ($ad_posts_mode) {
case \'image\':
echo \'<div class="\'.(($ad_posts_box) ? \'box\' : \'\').\' between_posts"><a target="_blank" href="\'.of_get_option(\'ad_posts_image_link\').\'"><img src="\'.of_get_option(\'ad_posts_image\').\'"></a></div>\';
break;
case \'html\':
echo \'<div class="\'.(($ad_posts_box) ? \'box\' : \'\').\' between_posts">\'.apply_filters(\'shortcode_filter\',do_shortcode(of_get_option(\'ad_posts_code\'))).\'</div>\';
break;
}
}
}
$x++;
}
}
最合适的回答,由SO网友:Gilipe 整理而成
你似乎只差一个字母。
post__not_in => array(118)
Post & Page Parameters
您还可以尝试添加if语句,例如:
if($post->ID != 118) :
。。。运行其余代码
虽然不是最优的,但如果没有看到模板的其余部分,我无法确定。
其他编辑:
<?php
$loop = new WP_Query(array(
\'post_type\' => \'cpt\',
\'orderby\' => \'date\',
\'order\' => \'DESC\',
\'posts_per_page\' => -1
));
if($loop->have_posts()) :while($loop->have_posts()) : $loop->the_post();
if($post->ID != 118) :
?>
The Title is: <?php the_title(); ?>. The ID is: <?php $post->ID; ?>
<?php endif; endwhile; endif; wp_reset_query(); ?>
在我创建的一个测试CPT上使用这个简单的示例,并创建几个测试帖子(再加上使用其中一个测试帖子的随机ID),帖子没有显示出来。如果它仍然为您显示,则可能不是正确的$post->ID,或者您的示例中缺少了一些内容。