WordPress按ID调用指定文章仅显示第一篇,如何显示全部?
解决WordPress自定义Metabox文章ID列表仅显示第一篇的问题
问题根源
你代码里的get_post_meta第三个参数传了false,这会让它返回二维数组(格式类似[[2204,2218,2187]]),而WP_Query的post__in参数要求传入一维数组,所以只有第一个ID被正确识别,其他ID都被忽略了。
两种修复方案
方案1:修改get_post_meta的参数
把get_post_meta的第三个参数改为true,直接获取存储的数组值:
// 原代码 $instagram_post_ids = get_post_meta(get_the_ID(), 'instagram_post_id', false); // 修改后 $instagram_post_ids = get_post_meta(get_the_ID(), 'instagram_post_id', true);
这个方案最直接,因为你的metabox存储的是数组,true参数会直接返回这个一维数组,刚好符合post__in的要求。
方案2:扁平化二维数组(如果必须保留false参数)
如果因为某些原因不能改第三个参数,就把返回的二维数组转成一维:
$instagram_post_ids = get_post_meta(get_the_ID(), 'instagram_post_id', false); // 取第一个子数组(因为metabox只存了一组ID) $instagram_post_ids = $instagram_post_ids ? reset($instagram_post_ids) : [];
修改后的完整代码
<div class="grve-row grve-bookmark"> <?php // 获取自定义Metabox中的Instagram文章ID $instagram_post_ids = get_post_meta(get_the_ID(), 'instagram_post_id', true); // 检查是否有ID列表 if (!empty($instagram_post_ids)) : $args = array( 'post_type' => 'post', // 根据需要修改文章类型 'post__in' => $instagram_post_ids, 'orderby' => 'post__in', 'posts_per_page' => -1, // 强制显示所有匹配的文章,避免默认分页限制 ); $custom_query = new WP_Query($args); if ($custom_query->have_posts()) : while ($custom_query->have_posts()) : $custom_query->the_post(); ?> <div class="wpb_column grve-column grve-bookmark grve-column-1-3"> <?php if (has_post_thumbnail()) : ?> <div class="featured-image"> <a href="<?php the_permalink(); ?>"> <?php the_post_thumbnail(300, true); // 按需调整图片尺寸 ?> </a> </div> <?php endif; ?> <h4 class="post-title"> <a href="<?php the_permalink(); ?>"><?php the_title(); ?></a> </h4> </div> <?php endwhile; else : echo '<p>没有找到对应的文章</p>'; endif; // 重置文章数据 wp_reset_postdata(); else : echo '<p>未设置Instagram文章ID</p>'; endif; ?> </div>
额外添加了posts_per_page => -1,确保WP_Query返回所有匹配的文章(默认WordPress仅显示10篇),避免分页设置导致部分文章不显示。
内容的提问来源于stack exchange,提问作者akoual.house
相关产品推荐
相关产品推荐

