仅为订阅者禁用作者页面

时间:2016-10-29 作者:RodneyHawk

有人知道如何仅为订阅者禁用作者页吗?

因此,应仅对用户角色“subscriber”禁用它

3 个回复
最合适的回答,由SO网友:CK MacLeod 整理而成

奇怪的是,也许没有get_user_role 函数,所以前面的答案产生错误也就不足为奇了。

根据我与Rodney Hawk的讨论,我仍然想知道这个练习的意义是什么,或者这个操作所服务的安全功能是其他方法无法更好地服务的,但是,如果首选的目标是在作者是“订阅者”的情况下从作者配置文件页面重定向每个人,那么您可以使用以下内容:

//for authors template (author.php or variant)
$curauth = (get_query_var(\'author_name\')) ? get_user_by(\'slug\', get_query_var(\'author_name\')) : get_userdata(get_query_var(\'author\')) ;

$author_roles = $curauth->roles ;

if ( in_array( \'subscriber\', $author_roles ) ) {
    //probably would want something a little different, but good enough for example
    wp_redirect( \'http://redirect-here.com\', 404 ) ;
    //always follow wp_redirect with exit...
    exit ;
}
注意:上面使用的$curauth代码似乎直接来自Codex。考虑到这种情况的具体情况(仅针对author.php模板,仅针对订阅者),您可以更简单地编写第一行,如下所示:

$author_roles = get_user_by(\'slug\', get_query_var(\'author_name\') )->roles ;
注2:尚未测试重定向部分。

SO网友:RodneyHawk

我试过这样做,但它不起作用:

function wpse74924_filter_the_author_posts_link( $link ) {
    // Since $author_id doesn\'t get passed to this filter,
    // we need to query it ourselves
    $author_id = get_the_author_meta( \'ID\' );

    if ( user_can( $author_id, \'administrator\' ) ) {
        // This is an administrator
        __return_false();
    }
    // Otherwise, return $link unmodified
    return $link;
}
add_filter( \'the_author_posts_link\', \'wpse74924_filter_the_author_posts_link\' );

SO网友:Florian

作者。php如果是订阅者的作者页面,您可以将访问者重定向到其他地方。

$curauth = (get_query_var(\'author_name\')) ? get_user_by(\'slug\', get_query_var(\'author_name\')) : get_userdata(get_query_var(\'author\'));

if ( get_user_role($curauth->ID) === \'subscriber\' ):
    wp_redirect( \'http://redirect-here.com\', 404 );
    endif;