使用用户名和密码保护的个人页面

时间:2015-06-04 作者:shackleton

我们正在建立一个WordPress网站,其中一个页面需要通过用户名和密码访问。

我知道我可以创建一个“私有”页面,用户可以在其中输入密码进行查看。然而,我们的客户要求我们能够为此特定页面创建唯一的用户名/密码组合。因此,我还希望能够重置忘记的密码。

我在网上进行了研究,但没有找到任何可行的解决方案。我想知道这方面是否有最佳实践。我在想,也许我们可以创建一个新的用户角色,并隐藏这种类型用户的WordPress仪表板?我走对了吗?任何经验都将不胜感激。

1 个回复
最合适的回答,由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。

结束

相关推荐

Wp_lostpassword_url未转义

我有一个ajax登录表单,还有一个丢失的密码链接,可以通过wp_lostpassword_url() 作用当我验证我得到的页面时Error: & did not start a character reference. (& probably should have been escaped as &.) 在线链接所在的位置。这能以某种方式解决吗?我已经激活了woocommerce,所以它会将我发送到woocommerce页面进行登录。我可以创建一个自定义函数,将用