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
相关产品推荐
相关产品推荐

