当我们用参数分隔令牌时,我们在计算WP URL重写规则时遇到了一些麻烦。简而言之,我们希望用户页面和视频库具有以下通用格式:
/users/steve/videos/2
…在"users"是显示用户详细信息的PHP页面模板。如果我们输入:
/users/steve/
…我们看到了史蒂夫的主页。如果我们进入:
/users/steve/videos/
…我们点击视频库的页面模板,我们看到了史蒂夫的视频列表。如果我们输入:
/users/steve/videos/2
…我们点击第三个页面模板,视频播放器页面,在这里我们看到视频id为2。
所以我们有三个单独的页面模板,我们希望它们之间的子/父关系是user page ->视频库页面->视频播放器页面,用于我们的面包屑显示。
我们弄不明白的诀窍是和"2";实际上是插入到url中的参数,打断了父/子令牌关系。第二,对于视频播放器,这里根本没有映射到视频播放器页面模板的标记。这只是"视频"的存在。令牌加上附加的数字参数,告诉我们这映射到视频播放器页面模板。
作为替代方案,我们已经想出了如何使/users/videos/steve/2工作。我们已经将这个重写规则添加到子主题的functions.php文件中:
add_rewrite_rule(
'^users/videos/([^/]*)/([^/]*)/?',
'index.php?pagename=users/videos&users_filter_name=$matches[1]&user_video_id=$matches[2]',
'top');
(我们还定义了变量&;users_filter_name&;和";user_video_id"我们成功地在模板中解析了它们)
但是由于我们真正想要的是/users/steve/videos/2,我们尝试将规则更新为:
add_rewrite_rule(
'^users/([^/]*)/videos/([^/]*)/?',
'index.php?pagename=users/videos&users_filter_name=$matches[1]&user_video_id=$matches[2]',
'top');
这似乎不起作用(它只是加载了'/users/'页),所以我们显然做错了。我们想要的东西可以通过这种结构实现吗?
谢谢!
/users/steve/videos/2/格式的链接结构对Wordpress来说不是问题,实际上你写的所有代码都是正确的,但是在某个地方有一个小错误。
很可能在向query_vars添加新变量的代码部分出现问题。也许你在太晚的行动中添加了第二个变量。当Wordpress看到一个模糊的变量时,它通常会像你描述的那样运行。
尝试删除所有代码并将其复制到functions.php top
add_rewrite_rule(
'^users/([^/]*)/videos/([^/]*)/?',
'index.php?pagename=users/videos&users_filter_name=$matches[1]&user_video_id=$matches[2]',
'top');
add_filter( 'query_vars', function( $vars ){
$vars[] = 'users_filter_name';
$vars[] = 'user_video_id';
return $vars;
} );
如果它不起作用,尝试将代码更改为
add_rewrite_rule(
'^users/([^/]*)/videos/([^/]*)/?',
'index.php?page_id=54&users_filter_name=$matches[1]&user_video_id=$matches[2]',
'top');
add_filter( 'query_vars', function( $vars ){
$vars[] = 'users_filter_name';
$vars[] = 'user_video_id';
return $vars;
} );
其中54 =你的页面ID
每次更改后,您必须进入设置并关闭/打开永久链接以重置缓存
我在我的演示中测试了这段代码,它100%工作。