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

WordPress通过ACF用户ID筛选自定义文章问题求助(Elementor+WooCommerce)

解决WooCommerce用户仪表盘显示指定用户分配文章的问题

问题分析

你之前的代码误用了ACF的acf/fields/post_object/query钩子——这个钩子是用来修改ACF后台选择文章时的查询条件,并非前端内容展示的筛选逻辑。要在WooCommerce用户仪表盘展示当前用户被分配的mypost类型文章,需要针对Elementor的查询规则进行调整,通过文章元数据直接筛选。

正确代码实现

方法1:基于Elementor查询ID筛选

假设你在Elementor中给目标查询设置的查询ID为user_assigned_posts,将以下代码添加到当前激活主题的functions.php文件:

add_action( 'elementor/query/user_assigned_posts', function( $query ) {
    $current_user_id = get_current_user_id();
    
    // 仅在用户登录时添加筛选条件
    if ( $current_user_id ) {
        $query->set( 'post_type', 'mypost' );
        $query->set( 'meta_query', array(
            array(
                'key'     => 'usersacf',
                'value'   => $current_user_id,
                'compare' => '=',
            )
        ) );
    }
} );

方法2:全局自定义文章类型筛选

如果不需要依赖Elementor查询ID,也可以直接对mypost类型的所有前端查询添加筛选,确保用户仪表盘只显示当前用户被分配的文章:

add_action( 'pre_get_posts', function( $query ) {
    // 限制仅在前台、用户登录、且查询目标为mypost类型时生效
    if ( ! is_admin() && is_user_logged_in() && $query->is_main_query() && $query->get( 'post_type' ) === 'mypost' ) {
        $current_user_id = get_current_user_id();
        $query->set( 'meta_query', array(
            array(
                'key'     => 'usersacf',
                'value'   => $current_user_id,
                'compare' => '=',
            )
        ) );
    }
} );

注意事项

  • 确保ACF的usersacf字段设置中,返回值选择「用户ID」
  • 代码添加后请清除网站缓存,确保规则生效

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.29 03:17:37