如何让WordPress后台文章列表中只显示作者自己发不过的文章呢?有时候我们会给网站添加一些作者,给予他们发布文章的权限,不过当他们点击后台的时候,显示的确实所有的文章列表,其中自然也包括了他们写的文章,并非是只显示他们所写的文章。这样一来,当一个站点的文章多了,用户数量多了之后,如果一个作者查看后台显示的文章是站点所有的文章,那么就会造成两个问题,一个就是查询数据量大,一个就是作者想要找到自己的文章步骤麻烦,那么通过下面的代码就会省事不少。
WordPress让用户后台只显示自己的文章
直接将下面的代码添加到functions.php中即可,代码通过判断当前用户级别来显示文章,管理员可以显示所有文章,其余的都只能看到自己的文章:
function mypo_parse_query_useronly( $wp_query ) {
if ( strpos( $_SERVER[ 'REQUEST_URI' ], '/wp-admin/edit.php' ) !== false ) {
if ( !current_user_can( 'level_10' ) ) {
global $current_user;
$wp_query->set( 'author', $current_user->id );
}
}
}
add_filter('parse_query', 'mypo_parse_query_useronly' );
相关的效果如下:
这里是一个测试用户的后台,里面没有显示文章,但是右上角却显示了明明有6篇文章,这是因为,这些文章都不是这个测试用户缩写的,所以在后台无法显示。
然后我们用测试用户发布一篇文章
这个时候后台显示明明有七篇文章,但是文章列表只显示了一篇刚刚自己发不过的文章:
同时在主页面我们同样可以看到这篇文章的发布,证明整个流程并没有问题,代码方面也是正确的,想必大家都迫不及待的想去测试了吧。
更多教程2:
对于多作者博客,默认情况下,在WordPress后台的评论列表是可以看到其他作者文章下的评论的,如果要限制用户只能看到自己文章下的评论,将下面的代码添加到主题根目录下的 functions.php 即可:
/**
* 让作者在 WordPress 后台只能看到自己文章下的评论
*/
function wpdx_get_comment_list_by_user($clauses) {
if (is_admin()) {
global $user_ID, $wpdb;
$clauses['join'] = ", wp_posts";
$clauses['where'] .= " AND wp_posts.post_author = ".$user_ID." AND wp_comments.comment_post_ID = wp_posts.ID";
};
return $clauses;
};
if(!current_user_can('edit_others_posts')) {
add_filter('comments_clauses', 'wpdx_get_comment_list_by_user');
}
注:你可能需要修改 第 8-9 行中的几个 wp_ 为你自己的数据库前缀。第 13 行添加了判断,只有“编辑”角色以下的用户才生效,也就是说,属于编辑和管理员这两个角色的用户是不限制的。