如何在Employees自定义文章类型查询中排除当前文章缩略图?
解决自定义文章类型单页排除当前帖子缩略图的问题
我来帮你搞定这个问题!你遇到的exclude参数不生效的情况,主要是现有代码里的两个关键问题导致的:
include参数使用错误:你用了include => get_post_thumbnail_id(),但get_post_thumbnail_id()返回的是当前帖子的特色图附件ID,而不是帖子ID。WP_Query的include参数是用来指定要加载的帖子ID列表,这个参数会直接覆盖exclude的作用,所以你的排除逻辑根本没机会生效。- 错误的排除参数:WP_Query里用来排除帖子的正确参数是
post__not_in(接受数组格式),而不是exclude(这个参数已经被弃用了)。
修正后的完整代码
<?php // 仅在Employees单篇文章页面才添加排除当前帖子的条件 $exclude_current = is_singular('employees') ? array(get_the_ID()) : array(); $args = array( 'post_type' => 'employees', 'post_status' => 'publish', 'order' => 'ASC', 'posts_per_page' => -1, 'post__not_in' => $exclude_current, // 筛选出有特色图的帖子,确保只加载带缩略图的内容 'meta_query' => array( array( 'key' => '_thumbnail_id', 'compare' => 'EXISTS' ) ) ); $my_query = new WP_Query($args); if ($my_query->have_posts()) : while ($my_query->have_posts()) : $my_query->the_post(); ?> <div class="col-md-2"> <a href="<?php the_permalink(); ?>"> <?php the_post_thumbnail(); ?> </a> </div> <?php endwhile; endif; wp_reset_postdata(); // 推荐用wp_reset_postdata()代替wp_reset_query(),更准确 ?>
关键修改说明
- 替换排除参数:用
post__not_in替代无效的exclude,并传入当前帖子ID的数组(仅在单篇文章页面生效,避免归档页面也排除内容) - 移除错误的
include参数:改用meta_query筛选存在_thumbnail_id元数据的帖子,这才是正确筛选有特色图帖子的方式 - 优化重置查询:用
wp_reset_postdata()代替wp_reset_query(),因为我们用的是自定义WP_Query,前者更适合恢复原始的$post对象
这样修改后,当你在Max的文章页面时,查询就会自动排除Max的帖子,只加载Phil、Denise等其他Employees的缩略图啦!
内容的提问来源于stack exchange,提问作者user5662592
相关产品推荐
相关产品推荐

