
在 wordpress 中使用 `get_posts()` 按作者名称查询文章时,需使用 `author_name` 参数(传入 `user_nicename`),而非 `author`(仅接受整数型用户 id);否则将忽略条件,返回所有作者的文章。
WordPress 的 WP_Query 及其封装函数(如 get_posts())对作者筛选提供了两个关键参数:
- author:仅接受用户 ID(整数),例如 author => 5。若传入字符串(如 'admin' 或 'john-doe'),查询会静默失效,退化为无作者限制。
- author_name:接受用户的 user_nicename(URL 友好别名),即后台用户资料中“昵称”字段生成的规范化小写连字符形式(如管理员默认为 admin,张三可能为 zhang-san)。注意:它不等于显示名称(display_name)或登录名(user_login),必须与数据库 wp_users.user_nicename 字段完全匹配。
✅ 正确用法示例:
$posts = get_posts([
'post_type' => $param['post_type'] ?? 'post',
'author_name' => $param['author'] ?? '', // 传入 user_nicename,如 'emma-watson'
'orderby' => $param['orderby'] ?? 'date',
'order' => strtoupper($param['order']) === 'ASC' ? 'ASC' : 'DESC',
'posts_per_page' => (int) ($param['posts_per_page'] ?? 10),
]);⚠️ 注意事项:
- 安全校验:$param['author'] 来自外部请求(如 URL 或 POST),务必验证其合法性。可配合 get_user_by('slug', $author_slug) 预查用户是否存在,避免无效查询;
- 大小写敏感:user_nicename 在 MySQL 中通常为 case-insensitive(取决于 collation),但建议统一使用小写传递;
- 性能提示:author_name 会通过 JOIN wp_users 表查询,对高并发站点建议缓存常用作者 slug → ID 映射;
- 调试技巧:启用 WP_DEBUG_LOG 并打印 $wpdb->last_query,可快速确认 SQL 是否包含 AND wp_users.user_nicename = 'xxx'。
? 扩展建议:若需支持按显示名、邮箱或昵称模糊搜索,应改用 WP_User_Query 先获取 ID,再传给 author 参数,以保持查询高效性。










