我想更改特定自定义帖子类型的永久链接结构.i.e
http://test.com/brand/calvin-klien?mtype=tab2
^this is dynamic
要
http://test.com/brand/calvin-klien/mtype/tab2
^this is dynamic
这是我试过的一段代码。
注册add_rewrite_tag
function custom_rewrite_tag() {
add_rewrite_tag('%mtype%', '([a-z0-9\-]+)');
}
add_action('init', 'custom_rewrite_tag', 10, 0);
add_action('init', 'wpse50530_journal_archive_rewrite', 10, 0);
代码1
function wpse50530_journal_archive_rewrite(){
add_rewrite_rule('brand/([a-z0-9\-]+)/([a-z0-9\-]+)/$','index.php?name=$matches[1]/?mtype=$matches[2]','top');
}
代码2
add_action('generate_rewrite_rules', 'work_list');
function work_list($wp_rewrite) {
$newrules = array();
$newrules['brand/([a-z0-9\-]+)/([a-z0-9\-]+)/$'] = 'index.php?name=$matches[1]&mtype=$matches[2]';
$wp_rewrite->rules = $newrules + $wp_rewrite->rules;
我在codes
,flushed permalinks
上方尝试过,但仍然是404
。我不知道为什么它会在htaccess中创建 $ matches ,因为htacces不知道什么是 $ matches
此外,我已尝试monkeyman-rewrite-analyzer plugin显示我的永久链接的正确匹配结果,但仍显示404
。请参阅Code1& amp;的附加截图。代码2
答案 0 :(得分:3)
以下代码应该有帮助
add_action( 'init', 'so_27487849' );
function so_27487849() {
add_rewrite_rule(
'^brand/([^/]*)/mtype/([^/]*)/?',
'index.php?name=$matches[1]&mtype=$matches[2]',
'top');
}
刷新你的永久链接,它应该工作。
答案 1 :(得分:0)
我将继续使用Anand的代码进行进一步的更改。它在name=$matches[1]
上重定向,我需要保持与我点击的相同网址,为此必须包含自定义帖子类型名称。
add_action( 'init', 'so_27487849' );
function so_27487849() {
add_rewrite_rule('^brand/([^/]*)/([^/]*)/?','index.php?brand=$matches[1]&mtype=$matches[2]','top');
^--this
}
我得到了漂亮的网址...... Yaaay !!!
但是 URL
不包含query string(i.e: mtype=tab1)
,其余的代码也没用,所以我们可以通过get_query_var('mtype')
来实现这一点,并获得相同的值在$_REQUEST['mtype']
工作,我的代码就像一个魅力。
我也停用了monkeyman pluggin
答案 2 :(得分:0)
在调用函数add_rewrite之前或之后..插入这段代码status_header(200);