ACF关联字段查询无结果:如何筛选关联Branding的Cases文章?
问题原因及解决办法:ACF关联字段的WP_Query无结果
核心问题
ACF的关联字段(Relationship)默认存储的是关联文章的ID,而非文章标题或别名(slug)。你当前用meta_value => 'branding'匹配,相当于查找meta值等于字符串"branding"的Cases文章,但实际存储的是Branding这篇Work文章的数字ID,所以自然查不到结果。
解决方案1:直接用文章ID查询(推荐,效率最高)
先获取Branding文章的ID,再用ID作为meta值查询:
// 获取标题为Branding的Work文章ID $branding_id = get_page_by_title('Branding', OBJECT, 'work')->ID; $case_args = array( 'post_type' => 'cases', 'posts_per_page' => -1, 'meta_key' => 'work', 'meta_value' => $branding_id, // 替换为文章ID 'orderby' => 'menu_order', 'order' => 'ASC' ); $cases = new WP_Query( $case_args ); if( $cases->have_posts() ): while( $cases->have_posts() ) : $cases->the_post(); // 在这里输出Cases文章内容,示例: the_title(); endwhile; wp_reset_postdata(); // 重置全局文章对象,避免后续冲突 endif;
解决方案2:通过文章标题关联查询(适用于无法提前获取ID的场景)
如果必须通过标题查询,需要连表关联Work文章表,匹配标题:
global $wpdb; $case_args = array( 'post_type' => 'cases', 'posts_per_page' => -1, 'orderby' => 'menu_order', 'order' => 'ASC', // 关联Work文章表,匹配标题 'join' => "INNER JOIN {$wpdb->posts} work_posts ON {$wpdb->postmeta}.meta_value = work_posts.ID", 'where' => "AND work_posts.post_title = 'Branding' AND work_posts.post_type = 'work'" ); $cases = new WP_Query( $case_args ); if( $cases->have_posts() ): while( $cases->have_posts() ) : $cases->the_post(); // 输出内容,示例: the_title(); endwhile; wp_reset_postdata(); endif;
额外注意事项
- 如果你的ACF关联字段设置为允许多选,存储的是序列化后的ID数组,这时候需要修改查询条件为:
'meta_query' => array( array( 'key' => 'work', 'value' => '"' . $branding_id . '"', 'compare' => 'LIKE' ) ) - 务必在循环结束后调用
wp_reset_postdata(),避免全局文章对象被污染,影响后续查询。
内容的提问来源于stack exchange,提问作者Corre
相关产品推荐
相关产品推荐

