我们正在建立一个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。