受密码保护的页面+如果未经身份验证/授权,则显示不同的页面

时间:2015-07-22 作者:WordPressNewbie

I have a few pages of custom posts that I would like to password protect via the following business rules:

  • I can create a number of passwords to access the page
  • An expiration date can be set for each password
  • Logged in admins are automatically authenticated/authorized to see the page
  • Display different content depending if the user viewing the page is authenticate/authorized (e.g. if not logged in, display the page with modified content + password field; if logged in, display all the content)

It would also be good if I could set these password to apply to multiple pages at once. Is there a way to do this in WP natively?

1 个回复
SO网友:Marcin

正如iLocin所提到的,一些需求将需要额外的定制。

我可以创建多个密码来访问该页面

您将创建用户帐户。没有用户,密码就不存在。

可以为每个密码设置过期日期

这在wordpress中没有实现,需要做的工作最多。您可能会在usermeta中存储一个日期,并在每次登录时进行检查,并在重置密码时进行更新。看看这些功能:

https://codex.wordpress.org/Function_Reference/update_user_metahttps://codex.wordpress.org/Function_Reference/get_user_meta

登录的管理员会自动通过身份验证/授权以查看页面

有几种方法可以实现这一点。您肯定想创建一个新角色,并且可以为角色有权访问的给定页面集使用页面模板。

我建议不要授予管理权限,因为这些权限允许人们对站点本身进行更改(除非这是您的意图),而是分配自定义Role.

创建角色的示例代码。为角色名称定义一个常量,以便可以从tamplate引用它。通过这种方式,您还可以控制与其他访问相关的特定权限:

    define(\'SOME_ROLE\', \'somerole\');
    define(\'ADMINISTRATOR_ROLE\', \'administrator\');

    add_role(SOME_ROLE, __( \'Some Role\', \'textdomain\' ), array(
        \'read\'                   => true,
        \'edit_posts\'             => false,
        \'delete_posts\'           => false
    ) );
您可以使用此功能检查用户是否具有给定角色:

public static function current_user_has_role($role) {

    $user = wp_get_current_user();
    if(in_array($role, (array) $user->roles )) {
        return true;
    }        
    return false;

}
您可以将以下代码添加到模板php的顶部。这将检查用户是否具有该角色或任何其他具有管理权限的角色。同样,可能还有其他方法可以使用过滤器等来实现这一点,但这将起作用。

// Check access
if(  !is_user_logged_in() || 
     !(current_user_has_role(SOME_ROLE) || 
       current_user_has_role(ADMINISTRATOR_ROLE))) {
    wp_redirect(wp_login_url());
    exit;
}
根据查看页面的用户是否经过身份验证/授权,显示不同的内容(例如,如果未登录,则显示包含修改内容+密码字段的页面;如果登录,则显示所有内容)

您可以将上面的wp\\u重定向调用更改为其他url或添加其他逻辑。

结束