如何需要授权/登录才能查看一组特定的帖子/页面?

时间:2012-11-08 作者:timshutes

我在wordpress网站上为一位客户工作,他希望为他的员工建立一个内部“intranet”。基本需求是:

内部沟通公司重要文件为员工提供了快速访问资源的途径此信息非常敏感,仅供员工使用。他们希望每位员工都有用户名/密码,并且只有在登录后才能查看信息和文档。

我看到了这些插件,还有一些类似的插件,但它们似乎很有限,当然,它们现在已经完全过时了:

我知道我可以对个人帖子/页面进行密码保护。我可以用密码保护整个类别的帖子,或者更好的是自定义帖子类型吗?基本上,我需要在登录下将一些页面/帖子分组在一起。这些信息是敏感的,因此不可用,例如在RSS提要中。我该怎么做?

选项1(不太理想):在登录墙后面有一个完整的wordpress构建选项2(更理想):只在登录墙后面有内部页面/帖子底线:如果选项1更简单,我对它感兴趣,但更喜欢选项2。目前,经过一些研究,我只找到了有助于实现这一点的过时插件,似乎找不到可靠的方法来实现这两种功能。谢谢你的帮助!

6 个回复
SO网友:Chris Rae

这只是对timshutes\' answer - 如果您希望特定页面需要登录,并且不想将其放入自定义的帖子类型,则可以添加到函数。php:

add_shortcode(\'need_login\', \'shortcode_needLogin\');

function shortcode_needLogin() {
    if (!is_user_logged_in()) {
        auth_redirect();
    }
}
然后在需要登录的页面顶部,您可以执行以下操作:

[need_login]

SO网友:Mridul Aggarwal

可以在相应的存档页上进行检查;单页

但是,在使用所有其他解决方案的同时,您绝对应该做的一件事是使用the_posts 滤器它过滤掉任何WP\\u查询检索到的帖子。您将获得一个post对象数组。检查状况(&A);如果对象存在,请取消设置该对象。这是为了在所有其他解决方案都被绕过时使用。如果某个未知插件在你不知道的情况下检索帖子,这是最后的手段。

另一件你应该使用的是pre_get_posts 筛选以检查查询变量(&P);根据需要进行更改

另一个是posts_where 过滤器,使用它向mysql查询中添加另一个where子句

这不是完全安全的,但它应该涵盖大多数情况&;甚至大多数外部插件。

如果使用自定义的帖子类型,它会变得容易得多。您可以为该post\\u类型设置自定义功能(&U);然后,仅将这些功能提供给特定角色的用户。

您可以要求您的客户手动将每篇帖子设置为“私人”,但您可以确保他们现在会忘记它&;然后如果安全很重要,最好不要这样做。

SO网友:timshutes

这是老生常谈了,但我最终还是解决了这个问题。

为Intranet页面创建了自定义帖子类型您可以自定义它,以仅允许某些用户使用,例如,使用jason提到的“Members”插件。

代码:

In functions.php

/* Require Authentication for Intranet */

function my_force_login() {
global $post;

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

At the top of page-intranet.php and single-intranet-pages.php

<?php my_force_login(); ?>
还有。。。就是这样。它正在工作。

安全注意事项:

我不知道确切的原因,但我不认为这种方法的安全性是完全可靠的

SO网友:Rezen

您可以将特定页面上的内容可见性设置为private,这需要访问者具有WordPress登录和权限级别才能查看内容。我的建议是创建一个template-intranet.php 对于“Intranet”页面,为属于Intranet的页面添加自定义菜单,以便可以在该页面上列出这些页面。您仍然需要将所有页面的状态设置为私有。

使所有intranet页面私有化的解决方法是functions.php 您可以编写一个条件来检查当前页面是否是“Intranet”页面的子页面-如果该页面是Intranet的子页面,则检查用户是否登录,如果没有重定向,如果没有继续。

SO网友:Jason Rhodes

如果您想手动管理身份验证并将其包装到WordPress身份验证中,那么@Rezen的想法是正确的。不过,我更喜欢使用特定的页面模板或页面模板列表来检查auth。

您还可以查看JustinTadlock的“成员”插件,它有很多自定义角色管理,您可能可以利用这些功能。

SO网友:Vladimir

过滤器:

add_filter(\'template_include\', \'theme_check_user_permissions\', 1, 1);
add_filter(\'logout_url\',\'theme_logout_redirect\');
if(!current_user_can(\'edit_users\')) add_filter( \'wp_die_handler\', create_function(\'\',"return \'theme_wp_die_handler\';"));
如果用户未注册,则重定向到站点上的登录页面(guest.php,无仪表板)

function theme_check_user_permissions($template) 
{
    return (is_user_logged_in() ? $template : TEMPLATEPATH.\'/guest.php\');
}
登录后重定向到主页

function theme_logout_redirect($url, $redirect = null)
{
    return $url.\'&amp;redirect_to=\'.urlencode(get_bloginfo(\'url\'));
}
删除wp die页面(重定向到主页)

function theme_wp_die_handler()
{
    wp_redirect(get_bloginfo(\'url\'),307);
    exit;
}

结束

相关推荐

当出现错误时,防止wp_login_form()重定向到wp-admin

我已经在我的网站前端使用wp_login_form(). 但是,当用户键入错误的用户名/密码时,他们会被重定向到wp admin登录表单。如何在登录表单上方显示任何错误消息?理想情况下,我不希望用户看到Wordpress管理部分。我试过使用redirect_invalid_login() 胡克,但这似乎不起作用?