WP中自定义文章类型嵌套后the_field函数失效的问题求助
解决WP_Query循环后ACF字段无法获取的问题
问题根源是自定义WP_Query会覆盖全局的$post对象,循环结束后未恢复原始全局上下文,导致ACF的the_field()默认指向循环后的tariffs类型文章,而非原本的页面,因此无法获取页面字段。
正确处理步骤
- 循环前保存原始全局$post对象:在执行自定义查询前,将当前全局
$post存入临时变量。 - 循环结束后恢复全局上下文:调用WordPress官方推荐的
wp_reset_postdata()函数,或手动恢复原始$post并初始化上下文。
示例代码
// 保存原始全局$post对象 $original_post = $GLOBALS['post']; // 自定义WP_Query查询tariffs $tariffs_query = new WP_Query([ 'post_type' => 'tariffs', // 其他查询参数 ]); if ($tariffs_query->have_posts()) { while ($tariffs_query->have_posts()) { $tariffs_query->the_post(); // 循环展示tariffs内容 the_title(); // ...其他内容逻辑 } } // 关键:恢复全局上下文,确保后续the_field()指向原页面 wp_reset_postdata(); // 若wp_reset_postdata()失效,可手动恢复 // $GLOBALS['post'] = $original_post; // setup_postdata($original_post);
注意事项
- 不要使用
wp_reset_query(),该函数用于恢复主查询$wp_query,自定义查询应使用wp_reset_postdata(),避免干扰主查询状态。 - 必须在自定义循环执行完毕后立即执行恢复操作,不可遗漏。
内容的提问来源于stack exchange,提问作者Yaroslav
相关产品推荐
相关产品推荐

