WordPress 是一个针对公众阅读的博客系统,所以原生系统对阅读权限的设置并不出色,比如说系统就不提供限制为只允许登陆用户查看文章(或是查看指定目录、标签文章)的功能。WordPress 更像一个私人出版系统,所以这些功能不完善也可以理解。

对于我自己来说,我有一个自己的小博客系统,用来记录一下生活中的事情,这些内容并非不可公开,只是没有太多必要公开,因为我只是想写给自己看一下,并且其他人看这样的生活琐事并没有什么太大的价值。我想把这个做成自己的 QQ 空间,想让我允许的人来观看,仅此而已,不希望这个自留地太过于吵杂。

或者有人会问,那你为什么不用 QQ 空间?很简单,我不喜欢,太杂乱了,乱七八糟的广告、无聊的功能太多了。

要把 WordPress 加上一个授权用户才可以访问的权限也很简单,虽然有几个插件能实现这样的功能,但是反响并不好。最好的办法就是自己来 DIY 模板,这篇文章就对这个问题进行了详细的讨论,我这里加上一点自己的使用体会。

1. 先在模板的 functions.php 文件里定制一个用户权限检查的函数

最简单的,对于登陆用户的权限检查可以使用下面的例子代码:

<pre class="src src-php">function my_force_login() {
global $post;

if (!is_single()) return;

$ids = array(188, 185, 171); // array of post IDs that force login to read

if (in_array((int)$post-&gt;ID, $ids) && !is_user_logged_in()) {
    auth_redirect();
}

}

<p>
  如果你需要更严格一点,比如说需要确定本用户是属于这个博客的(现在的 WordPress 支持多博客),可以使用类似下面的代码,重点是使用了 is_user_member_of_blog 这个函数:
</p>

<pre class="src src-php">function my_force_login() {
global $post;

if (!is_user_logged_in()) {
    auth_redirect();
}

$user_id = get_current_user_id();
$blog_id = get_current_blog_id();
if ( !is_user_member_of_blog( $user_id, $blog_id ))
{
    wp_logout();//logout to let user to try loging again using right role
    die('User is a not Subscriber, please get Subscriber role or above to view this site!');
}  

}

<p>
  如果你需要更复杂的权限控制,比如说用户需要是这个博客的订阅者、作者或是管理员等级别的身份,可以使用 WordPress 的 <a href="http://codex.wordpress.org/Function_Reference/user_can">user_can</a> 函数来进行更复杂的用户身份查询。
</p></p>

2. 在特定的地方使用这个权限检查函数来约束用户

这里举一个最简单的使用例子,比如说在 header.php 使用上面这一个函数:

<pre class="src src-php">&lt;?php my_force_login(); ?&gt;

<p>
  上述代码很简单,但是很容易对其进行扩充,可以在其它你需要限制用户权限进行阅读的地方添加上述代码,比如说针对某个目录或是某个标签的浏览等。
</p></p>

3. 小结

这样如果用户需要查看你的 WordPress 博客,则一定需要登陆并拥有特定的权限了。通过这种方式修改过的模板要注意,如果升级了模板,则需要手动把这些修改合并到最新的模板代码里。