Author Profile URL

时间:2013-05-06 作者:Noob Theory

我有2个用户角色。“摄影师”和“订阅者”

我已经确定了我的作者。像这样的php

<?php get_header(); 
    $thisauthor = get_userdata(intval($author));
    $author_user = $wp_query->get_queried_object();
        ?>
     <div id="main">
     <?php
   if (user_can($author_user, \'photographer\')) { 
      get_template_part( \'author\', \'photographer\' ); }
   else if (user_can($author_user, \'subscriber\')) { 
      get_template_part( \'author\', \'subscriber\' ); }
     ?>
   </div><!--/main-->
     <?php get_footer(); ?>
这非常适合根据用户角色显示不同的配置文件。但是,我想根据角色更改url。

类似于

http://xxx.xxx/subscriber/username/

http://xxx.xxx/photographer/username/

有什么想法吗?

1 个回复
最合适的回答,由SO网友:Milo 整理而成

要更改所有作者URL,通常需要更改author base, 然而,由于您需要多个作者库,因此我们必须做一些不同的事情。

这有两个部分-第一部分是让WordPress识别自定义作者页面的传入请求并正确路由它们。为此,我们将添加两个新的重写规则,它们在subscriber/photographer/ 并将其作为author_name 到主查询。WordPress将处理这些is_author 请求,就像普通的作者页面一样。

function wpa_author_rewrite_rules(){

    add_rewrite_rule(
        \'subscriber/([^/]+)/?$\',
        \'index.php?author_name=$matches[1]\',
        \'top\'
    );

    add_rewrite_rule(
        \'photographer/([^/]+)/?$\',
        \'index.php?author_name=$matches[1]\',
        \'top\'
    );

}
add_action( \'init\', \'wpa_author_rewrite_rules\' );
请注意,在添加此代码后,需要刷新一次重写规则,以便它们生效。

第二部分是WordPress在使用API输出作者URL时生成正确的URL。修改WordPress输出通常通过过滤器完成,这里也是这样。我们通过author_link 滤器你会认出user_can 此处使用的函数用于检查$author_idsubscriberphotographer 角色,返回这些情况的自定义URL。

function wpa_author_link( $link, $author_id, $author_nicename ){

    if( user_can( $author_id, \'subscriber\' ) ){

        return home_url( \'subscriber/\' . $author_nicename . \'/\' );

    } elseif( user_can( $author_id, \'photographer\' ) ) {

        return home_url( \'photographer/\' . $author_nicename . \'/\' );

    }

    return $link;

}
add_filter( \'author_link\', \'wpa_author_link\', 10, 3 );

结束

相关推荐