You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在WP_User_Query中使用模板部件时,如何获取用户ACF数据?

解决WP_User_Query结合模板部件时ACF用户字段无法获取的问题

问题根源

核心问题是变量作用域:get_template_part()函数会在新的局部作用域中加载模板文件,循环中定义的$user变量无法被模板部件访问,导致$user->ID未定义,ACF的get_field()无法正确定位到用户的自定义字段。

解决方案

方法1:用set_query_var()传递用户变量(推荐)

修改主循环代码,在调用模板部件前将用户对象传递到全局查询变量中:

// WP_User_Query 参数
$args = array(
    'role'      => 'advisor',
    'number'    => 6
);
// 用户查询
$user_query = new WP_User_Query( $args );
if ( ! empty( $user_query->get_results() ) ) :
    foreach ( $user_query->get_results() as $user ) {
        // 将当前用户对象传递给模板部件
        set_query_var( 'current_advisor', $user );
        get_template_part('template-parts/advisor');
    }
endif;

模板部件中获取传递的变量并调用ACF:

<?php
// 从全局查询变量中取出用户对象
$current_advisor = get_query_var( 'current_advisor' );
if ( $current_advisor ) {
    $advisor_heading = get_field('advisor_heading', 'user_' . $current_advisor->ID);
}
?>

<div class="advisor__heading">
    <h2><?php echo $advisor_heading; ?></h2>
</div>

方法2:用include/require替代get_template_part()

include/require会继承当前作用域的变量,直接替换get_template_part()即可:

foreach ( $user_query->get_results() as $user ) {
    // 使用locate_template确保正确找到模板文件
    include(locate_template('template-parts/advisor.php'));
}

模板部件无需修改,保持原代码即可,因为$user变量会被直接继承。

方法3:直接传递用户ID

如果只需要用户ID,也可以单独传递ID参数:
主循环代码:

foreach ( $user_query->get_results() as $user ) {
    set_query_var( 'advisor_user_id', $user->ID );
    get_template_part('template-parts/advisor');
}

模板部件代码:

<?php
$user_id = get_query_var( 'advisor_user_id' );
$advisor_heading = get_field('advisor_heading', 'user_' . $user_id);
?>

<div class="advisor__heading">
    <h2><?php echo $advisor_heading; ?></h2>
</div>

内容的提问来源于stack exchange,提问作者alexconnor7

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.06 09:40:35