在使用WordPress多用户主题时,后台默认会显示所有用户的文章和媒体文件。这会导致用户能看到其他人的内容,不利于管理。
本文将介绍如何让WordPress后台只显示当前登录用户的文章和媒体文件,希望能为大家提供帮助。
实现方法
将以下代码添加到当前主题的 functions.php 文件中即可。
// 仅显示当前用户的文章和媒体文件(管理员除外)
add_action('init', 'check_user_role');
function check_user_role() {
global $current_user;
// 如果当前用户不是管理员,则应用限制
if ($current_user->roles[0] != 'administrator') {
// 在媒体库只显示用户自己上传的文件
add_action('pre_get_posts', 'MBT_restrict_media_library');
function MBT_restrict_media_library($wp_query_obj) {
global $current_user, $pagenow;
if (!is_a($current_user, 'WP_User')) {
return;
}
// 仅对媒体库Ajax查询生效
if ('admin-ajax.php' != $pagenow || $_REQUEST['action'] != 'query-attachments') {
return;
}
// 如果用户没有管理媒体库的权限,则只显示其上传的文件
if (!current_user_can('manage_media_library')) {
$wp_query_obj->set('author', $current_user->ID);
}
}
// 在文章列表只显示用户自己的文章
add_action('pre_get_posts', 'MBT_restrict_posts');
function MBT_restrict_posts($query) {
global $current_user;
if (is_admin() && !current_user_can('administrator')) {
$query->set('author', $current_user->ID);
}
}
}
}
代码说明与注意事项
- 此代码的核心逻辑是:非管理员用户在后台只能看到自己创建的文章和上传的媒体文件。
- 代码包含两个主要函数:
MBT_restrict_media_library用于限制媒体库显示,MBT_restrict_posts用于限制文章列表显示。 - 原示例代码仅处理了媒体库,上述增强版已补充对文章列表的限制,功能更完整。
- 请确保代码正确添加到主题的
functions.php文件末尾,或通过子主题/代码片段插件添加。 - 添加代码后,建议清空站点缓存(如果使用了缓存插件)并刷新后台页面以查看效果。
重要提示:本文提供的代码为标准实现,原文中提到的“修改数据库前缀”与本功能无关,请忽略。本功能不涉及直接操作数据库表。