WordPress ACF自定义profession字段统计用户数,现有代码返回0求解决
WordPress ACF职业字段用户统计短代码实现
原代码问题说明
你提供的代码返回0,主要原因有两个:
- 未限定用户角色(你需要统计的是订阅者,原代码查询了所有用户,其中非订阅者可能未设置该字段)
- 若职业名称拼写/大小写与ACF选项中的值不匹配,也会导致无结果
另外,原代码仅能统计单个职业,无法实现「各职业用户数量」的需求,以下是完整解决方案。
全职业统计短代码实现
将以下代码添加到主题的functions.php文件,或通过代码片段插件插入:
function profession_user_count_shortcode() { global $wpdb; // 查询订阅者群体中各职业的用户数量 $results = $wpdb->get_results( "SELECT um.meta_value AS profession, COUNT(u.ID) AS user_count FROM {$wpdb->users} u INNER JOIN {$wpdb->usermeta} um ON u.ID = um.user_id INNER JOIN {$wpdb->usermeta} ur ON u.ID = ur.user_id WHERE um.meta_key = 'profession' AND ur.meta_key = '{$wpdb->prefix}capabilities' AND ur.meta_value LIKE '%subscriber%' GROUP BY um.meta_value ORDER BY user_count DESC" ); if ( empty( $results ) ) { return '<p>暂无职业统计数据。</p>'; } // 构建统计结果的HTML输出 $output = '<ul class="profession-count-list">'; foreach ( $results as $result ) { $output .= sprintf( '<li><strong>%s</strong>: %d 人</li>', esc_html( $result->profession ), intval( $result->user_count ) ); } $output .= '</ul>'; return $output; } add_shortcode( 'profession_user_count', 'profession_user_count_shortcode' );
使用方法
在需要显示统计的页面或文章中插入短代码 [profession_user_count] 即可。
代码说明
- 直接通过
$wpdb执行SQL聚合查询,比多次调用WP_User_Query更高效 - 仅筛选订阅者角色(通过用户权限元数据关联查询)
- 对输出内容做了转义处理,避免安全风险
- 自动处理无数据的情况,返回友好提示
单个职业统计的修正代码
若你需要单独统计某一个职业(比如Doktor),可以使用以下修正后的代码:
<?php $args = array( 'role' => 'subscriber', // 限定仅订阅者 'meta_key' => 'profession', 'meta_value' => 'Doktor', // 确保与ACF选项中的值完全一致(注意大小写) 'meta_compare' => '=' ); $users = new WP_User_Query( $args ); echo $users->get_total(); ?>
内容的提问来源于stack exchange,提问作者Haldun Akoğlu
相关产品推荐
相关产品推荐

