Auth.php显示所有用户的个人资料,而不仅仅是作者

时间:2013-01-22 作者:Tomas

我对作者的模板有问题。它工作得很好,可以按预期显示作者配置文件,但问题是,只需在URL(www.mysite.com/author/subscribername)中替换用户名,就可以看到非作者配置文件(贡献者/订阅者,基本上是所有注册用户,包括和管理员)。

有没有简单的方法来修复它,只显示“作者”的个人资料,并为其他人返回“未找到页面”?

在您的支持之前,谢谢您。

Update:我已经申请并将使用的解决方案(除非有人建议如何修改初始查询)。这将返回正确的“未找到页面”页面,包括“未找到页面”页面标题:

function tb_author_role_template( $templates=\'\' )
{
    global $wp_query;

    $author = get_queried_object();
    $role = $author->roles[0];

    if($role == \'author\') 
    {
        $templates=locate_template(array("author.php",$templates),false);
    } else { // error if not author
        header( \'HTTP/1.0 404 Not Found\' );
        $templates = locate_template(array("404.php",$templates),false);
        $wp_query->is_404 = true;
    }
    return $templates;
}
add_filter( \'author_template\', \'tb_author_role_template\' );

3 个回复
SO网友:Dan

您将要使用author_template 筛选以处理此。只是想澄清一下,过滤器的“作者”似乎是指所有用户。我不知道为什么。当后端决定在站点上显示用户配置文件时要使用哪个模板页时,将调用此函数。您需要添加author-editor.php 文件,然后如果用户符合您的条件,则对其进行筛选。

function author_role_template( $templates=\'\' )
{
    $author = get_queried_object();
    $role=$author->roles[0];

    if($role == \'author\') {
        $templates=locate_template(array("author-author.php",$templates),false);
    } else { // error if not author
        $templates=locate_template(array("404.php",$templates),false);
    }
    return $templates;
}
add_filter( \'author_template\', \'author_role_template\' );
资料来源:Codex -- Template Hierarchy

注意:您需要验证roll为此返回true。我不是百分之百同意rollstring.

SO网友:diggy

以下是一种可能的方法,将在author.php:

<?php 
    global $wp_query;
    $roles = $wp_query->queried_object->roles;
    if( ! $roles[0] == \'author\' ) {
        echo \'<p>Nothing here!</p>\';
    } else { 
        // show author archive
    }
?>
如果不希望编辑模板,请查看template_redirect 作用

SO网友:funji

编辑htaccess尝试以下操作:

<IfModule mod_rewrite.c>
 RewriteEngine on
 RewriteCond %{HTTP_USER_AGENT} !Google [NC]
 RewriteRule ^author/?([_0-9a-z-]+)?/?$ http://misite.com [R=302,NC,L]
</IfModule>

结束

相关推荐