Wordpress Url重写与多个参数和模板-动态路径/参数放置



当我们用参数分隔令牌时,我们在计算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%工作。

最新更新