我的自定义帖子类型有如下结构:
领域com/成员/成员名称/书籍/书籍名称
基本上,我有一个自定义的post类型的成员,成员名称就是post。我要做的是传递一个名为books的变量,但我无法让代码正常工作。
我的解决方案是基于之前在这里被问到的,但我的结构是不同的,我一直在谷歌上搜索,但没有结果。我也真的无法理解重写结构!
function add_book_rewrite() {
add_rewrite_tag(\'%book_name%\',\'([^&]+)\');
}
add_action( \'init\', \'add_book_rewrite\' );
function add_book_rewrite_rules() {
add_rewrite_rule(\'^member/([^/]*)/book/([^/]*)/?\',\'index.php?post_type=member&name=$matches[2]&book_name=$matches[4]\',\'top\');
}
add_action( \'init\', \'add_book_rewrite_rules\' );
add_filter( \'query_vars\', \'add_query_var\' );
function add_query_var( $query_vars ) {
$query_vars[] = \'book_name\';
return $query_vars;
}
echo \'Book is \'.get_query_var(\'book_name\');
如果有任何关于这方面的建议,我们将不胜感激
谢谢
SO网友:Milo
首先,添加重写标记和查询变量是多余的,添加标记会添加查询变量。
第二$matches
对应于规则中的每个正则表达式模式,因此$matches[1]
和$matches[2]
, 不是2和4。
最后,对于单个member
, 您只需设置member
查询变量。
add_rewrite_rule(
\'^member/([^/]*)/book/([^/]*)/?\',
\'index.php?member=$matches[1]&book_name=$matches[2]\',
\'top\'
);
未经测试,但应该会让你朝着正确的方向前进。也看看这个
rewrite analyzer plugin 帮助您构建重写规则。