带有URL参数的自定义帖子类型的自定义重写规则

时间:2018-06-19 作者:GRowing

我正在尝试为自定义帖子类型创建自定义重写规则,其中

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\'];
我什么也没得到。。。

2 个回复
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-valuehttp://example.com/products/some-value 使用此正则表达式并粘贴到Yoast重定向正则表达式页面:

Type: 301永久移动
Regex Expression: 产品/?c=/?([^/]*)/
URL: 产品/1美元

我希望它能帮助其他想要改变方向的人add and rewrite_rule

最好的

结束

相关推荐