查询匹配ACF日期字段的WordPress用户:为何仅重存用户可显示?
问题解答
为什么只有重新保存的用户才会出现在查询结果里?
这是正常情况,你的查询逻辑完全依赖employee_order这个用户元字段,但这个字段仅在用户的employee_since(入职日期)字段被更新时才会生成——也就是用户重新保存时,update_user_metadata钩子才会触发custom_employee_order函数,给用户添加employee_order元数据。
那些没重新保存过的用户,数据库里根本没有employee_order这个元字段,自然不会被你的meta_query查询到。
如何批量给所有用户生成employee_order元字段?
你可以添加一段一次性执行的代码,遍历所有用户并补全这个字段:
// 批量生成employee_order字段 function batch_generate_employee_order() { // 获取所有用户,可根据需求添加role等参数过滤 $all_users = get_users(array('number' => -1)); foreach ($all_users as $user) { $employee_since = get_user_meta($user->ID, 'employee_since', true); // 若存在入职日期且未生成employee_order则处理 if (!empty($employee_since) && !get_user_meta($user->ID, 'employee_order', true)) { $order_value = date('nd', strtotime($employee_since)); update_user_meta($user->ID, 'employee_order', $order_value); } } echo '批量处理完成!'; exit; } // 通过后台链接触发执行 add_action('admin_action_batch_employee_order', 'batch_generate_employee_order');
使用步骤:
- 将这段代码添加到主题
functions.php或自定义插件中 - 登录WordPress后台,在浏览器地址栏输入:
你的网站域名/wp-admin/admin.php?action=batch_employee_order,回车访问 - 看到“批量处理完成!”提示后,删除或注释这段代码,避免重复执行
如果服务器支持WP-CLI,也可以用命令行批量处理:
wp user list --field=ID | while read user_id; do employee_since=$(wp user meta get $user_id employee_since) if [ ! -z "$employee_since" ]; then order_value=$(date -d "$employee_since" +%m%d) wp user meta update $user_id employee_order $order_value fi done
内容的提问来源于stack exchange,提问作者user3615851
相关产品推荐
相关产品推荐

