我们正在建立一个WordPress网站,其中一个页面需要通过用户名和密码访问。
我知道我可以创建一个“私有”页面,用户可以在其中输入密码进行查看。然而,我们的客户要求我们能够为此特定页面创建唯一的用户名/密码组合。因此,我还希望能够重置忘记的密码。
我在网上进行了研究,但没有找到任何可行的解决方案。我想知道这方面是否有最佳实践。我在想,也许我们可以创建一个新的用户角色,并隐藏这种类型用户的WordPress仪表板?我走对了吗?任何经验都将不胜感激。
 
                    最合适的回答,由SO网友:Howdy_McGee 整理而成
                    下面是我们要做的:
IF 用户登录并具有特定角色(订阅者),然后将其重定向到特定页面。
IF 用户尝试访问管理面板,将其重定向到特定页面。
对于上述问题,我们将使用3个挂钩:
- login_redirect - 用户登录后重定向after_setup_theme - 删除管理栏admin_init - 将订阅服务器排除在管理面板之外首先,让我们创建重定向:
/**
 * Redirect subscribers to specific page
 * @param string $redirect
 * @param string $request
 * return string
 */
function member_redirect( $redirect, $request ) {
    if( current_user_can( \'subscriber\' ) ) {
        return $specific_page
    }
    return $redirect;
}
add_filter( \'login_redirect\', \'member_redirect\', 10, 2 );
 如果当前用户是订阅者,我们将替换$specific_page 使用页面URL,否则让他们转到原来的标题。接下来,让我们确保订阅者无法访问管理面板:
/**
 * If user is subscriber AND trying to access admin panel, redirect them to specific page
 */
function subs_adminpanel_redirect(){
    if ( current_user_can( \'subscriber\' ) ){
        wp_redirect( $specific_page );
        exit;
    }
}
add_action( \'admin_init\', \'subs_adminpanel_redirect\' );
 同样,您可以替换$specific_page 使用您的实际URL。最后,让我们删除管理栏,这样用户甚至不知道有一个仪表板。
/**
 * Remove adminbar for Subscribers
 */
function subs_remove_adminbar() { 
    if( ! current_user_can( \'subscriber\' ) ) {
        add_filter( \'show_admin_bar\', \'__return_false\' );   
    }
}
add_action( \'after_setup_theme\', \'subs_remove_adminbar\' );
 这很简单,如果他们是订阅者,请为他们删除管理栏。沙克尔顿在下面的评论中指出的一个步骤默认为订阅服务器do not 有权查看私人页面。我们需要添加此功能:
/**
 * Allow Subscribers to view Private Pages
 */
function add_theme_caps() {
    $role = get_role( \'subscriber\' );
    $role->add_cap( \'read_private_pages\' );
}
add_action( \'admin_init\', \'add_theme_caps\' );
 你会把这些都扔进你的functions.php 在某个地方归档并进行测试。同样,这仅适用于订阅者,并且仅当您替换$specific_page 使用您的实际页面URL。