多分类URL重写不是很重要

时间:2017-10-11 13:38:59

标签: regex url-rewriting

我正在尝试重写WP URL,这里是URL:

http://example.com/?job_listing_region=california&job_listing_category=wordpress

我想将其更改为http://example.com/california/wordpress

我试过了:

add_rewrite_rule('([^/]*)/([^/]*)/?','job_listing_region=$matches[1]&job_listing_category=$matches[2]','top');

但它不起作用。对不起,我不擅长正则表达式它可能是一个小的,但我无法找到解决方案。提前致谢

3 个答案:

答案 0 :(得分:0)

代码

See regex in use here

<强>正则表达式

\??\w+=([^&]+)&?

<强>替换

$1/

结果

输入

http://example.com/?job_listing_region=california&job_listing_category=alcohol-abuse-programs

输出

http://example.com/california/alcohol-abuse-programs/

说明

<强>正则表达式

  • \??确切地匹配?字符的零和一个
  • \w+=匹配任何单词字符一次或多次,后跟=字符(\w可以替换为[a-zA-Z0-9_]如果首选/不起作用你的正则表达方式)
  • ([^&]+)一次或多次捕获除&字符以外的任何字符的捕获组1
  • &?字面上零和一个&字符匹配

<强>替换

  • $1/匹配与第一个捕获组最近匹配的文本相同的文本,然后是/字面意思

答案 1 :(得分:0)

使用http://example.com/ {job_listing_region} / {job_listing_category} /太宽泛 - 会影响您网站上的每个网址,例如/ wp-admin。

我建议使用http://example.com/jobs/ {job_listing_region} / {job_listing_category} /作为您的网址结构,在这种情况下,重写规则将设置如下:

add_rewrite_rule('^jobs/([^/]*)/([^/]*)/?','index.php?page_id=1234&job_listing_region=$matches[1]&job_listing_region=$matches[2]','top');

page_id应设置为您要将其发送到的页面/帖子的页面ID。

请务必注意,在您查看/保存设置后,重写可能无法使用 - &gt;永久链接页面位于后端。

答案 2 :(得分:0)

感谢上面的回答,他们帮助我最终得到了解决方案。

因此,在将url字符串传递给wordpress时,我们需要在functions.php中注册变量,然后使用php获取,我们需要使用wordpress var查询来获取URL。

正如上面@athms所建议的那样,我改变了url结构。

现在&#34; wordpress&#34;是一个wordpress页面,其中捕获了查询变量。

 So my URL is http://example.com/wordpress/?job_listing_region=california

在functions.php中我注册了这些变量:

function custom_query_vars_filter($vars) {
  $vars[] = 'job_listing_region';
  return $vars;
}
add_filter( 'query_vars', 'custom_query_vars_filter' );

function custom_rewrite_tag1() {
  add_rewrite_tag('%job_listing_region%', '([^&]+)');
}
add_action('init', 'custom_rewrite_tag1', 10, 0);

在functions.php中重写规则:

function custom_rewrite_rule3() {
    add_rewrite_rule('^wordpress/([^/]*)/?','index.php?page_id=35349&state=$matches[1]','top');
  }

  add_action('init', 'custom_rewrite_rule3', 10, 0);

此处页面ID是我创建的页面的ID,即&#34; wordpress&#34;

在&#34; wordpress&#34;的页面模板中我使用以下方式捕获了该区域:

$region = get_query_var('job_listing_region');

现在您可以将此变量传递给您的查询。

所以现在你可以开始使用这个漂亮的URL:

http://example.com/wordpress/california

URL california的结尾作为查询字符串,可以在我们的模板中使用。

相关问题