ADD_REWRITE_RULE-作者页面的附加子页面

时间:2021-09-09 作者:Micke Hasselqvist

我想在WordPress的作者页面中添加附加子页面。我有以下URL:

http://mylocalsite.site/author/USER_NAME/
但我还想添加如下URL:

http://mylocalsite.site/author/USER_NAME/pinboard
http://mylocalsite.site/author/USER_NAME/teams
我已经添加了一个名为author\\u view的标记:

add_action(\'init\', function( $vars ) {
    add_rewrite_tag( \'%author_view%\', \'([^&]+)\');
}, 10, 1);
访问此URL时,该选项非常有效:

http://mylocalsite.site/?author=1&author_view=pinboard
然后,我可以使用get\\u query\\u var()检索author\\u视图,并对其执行任何操作。

然而,我有点纠结于如何使用永久链接和重写规则获得相同的页面。这是我的重写规则和template\\u重定向:

add_action(\'init\', function( $vars ) {
    add_rewrite_tag( \'%author_view%\', \'([^&]+)\');

    global $wp_rewrite;
    $author_base = $wp_rewrite->author_base;

    add_rewrite_rule(
        $author_base . \'/([^/]*)/([^/]*)\',
        \'index.php?author=$matches[1]&author_view=$matches[2]\', 
        \'top\'
    );
    
}, 10, 1);

add_action( \'template_redirect\', function() {
    $author_view = get_query_var( \'author_view\', false );
    if($author_view) :
        include( get_template_directory() . "/author.php" );
        exit();
    endif;
} );
但是,由于查询的对象不是author对象,因此我得到了一系列错误。也许我走错了方向?

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

访问此URL时,该选项非常有效:

http://mylocalsite.site/?author=1&author_view=pinboard

是的,这是因为在该URL中author 值是用户ID。

但在;“漂亮”;该URL的版本(例如。http://mylocalsite.site/author/admin/pinboard), WordPress使用用户的;“好名字”;(来自user_nicename 中的列wp_users 默认情况下与用户名相同(来自user_login 列)。

因此,在重写规则的查询中add_rewrite_rule()), 您需要使用author_namenot author:

add_rewrite_rule(
    $author_base . \'/([^/]*)/([^/]*)\',
    \'index.php?author_name=$matches[1]&author_view=$matches[2]\', // use author_name
//  \'index.php?author=$matches[1]&author_view=$matches[2]\',      // and not "author"
    \'top\'
);
那样的话,is_author() 将在页面上返回true(带有author_view 因此,您不需要template_redirect 因为author template like author.php 将为您正确加载。

总之,只要更正查询参数的名称,您的规则就可以正常工作,而不会出现这些错误。:)(但请确保刷新重写规则-只需访问permalink设置页面)

相关推荐