我正在尝试为自定义帖子类型创建自定义重写规则,其中
This:
http://test.loc/products/directory/?c=some-value
应该成为
this:
http://test.loc/products/directory/some-value
Minimal code:
function create_post_type() {
register_post_type( \'acme_product\',
array(
\'labels\' => array(
\'name\' => __( \'Products\' ),
\'singular_name\' => __( \'Product\' )
),
\'show_ui\' => false,
\'public\' => true,
\'has_archive\' => true,
\'rewrite\' => array("slug" => "products/directory")
)
);
add_rewrite_rule(
\'^products/directory/([A-Za-z0-9-]+)/?$\',
\'index.php?post_type=acme_product&c=$1\',
\'top\'
);
}
我也试过这样:
add_rewrite_rule(
\'^products/directory/?([^/]*)/?\',
\'index.php?post_type=acme_product&c=$matches[1]\',
\'top\'
);
我根本无法得到
\'c\'. 重写规则中有什么应该有所不同的地方吗?我似乎没法让这件事起作用。
顺便说一下,我可以从以下内容中检索“c”的“一些值”:
http://test.loc/index.php?post_type=acme_product&c=some-value
为了检索模板中的值,我尝试了以下两种方法:
get_query_var( \'c\' );
以及
$_GET[\'c\'];
我什么也没得到。。。
SO网友:GRowing
SOLUTION:
我在这里回答我自己的问题,因为没有给出任何回答,我认为这可能对某人有所帮助,同时我找到了一个解决方案。。
我不得不使用第二个版本的“add\\u rewrite\\u rule”:
add_rewrite_rule(
\'^products/directory/?([^/]*)/?\',
\'index.php?post_type=acme_product&c=$matches[1]\',
\'top\'
);
我需要注册一个查询变量,因为WordPress无法识别外部查询参数
function 123wp_query_vars( $query_vars ){
$query_vars[] = \'c\';
return $query_vars;
}
add_filter( \'query_vars\', \'123wp_query_vars\' );
然后使用以下方法检索模板中的值:
get_query_var( \'c\' );
SO网友:Felipe Fernandes Rosa
如果您只想使用regex进行重定向,请使用Yoast SEO并选择Redirects,然后选择option regex。
对于url,从http://example.com/products/?c=some-value
到http://example.com/products/some-value
使用此正则表达式并粘贴到Yoast重定向正则表达式页面:
Type: 301永久移动
Regex Expression: 产品/?c=/?([^/]*)/
URL: 产品/1美元
我希望它能帮助其他想要改变方向的人add and rewrite_rule
最好的