我想在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对象,因此我得到了一系列错误。也许我走错了方向?
最合适的回答,由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_name
和not 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设置页面)