【问题标题】:WordPress - Rewrite rules with multiple parametersWordPress - 使用多个参数重写规则
【发布时间】:2015-06-08 23:34:46
【问题描述】:

我正在设置一个通常接受两个查询字符串参数的 WordPress 页面。我们的主机更喜欢使用重写规则而不是查询字符串,所以我必须采用这种方法。

所以我通常会这样做:

domain.com/animal-page.php?animal=dog&color=brown

我必须这样做:

domain.com/animal-page/animal/dog/color/brown

我遇到的问题是第二个查询字符串参数是可选的。

这样的重写规则是行不通的:

add_rewrite_rule(
    '([\-\w+]*)/animal/([\w+]*)/color/([\w+]*)', 
    'index.php?pagename=$matches[1]&animal=$matches[2]&color=$matches[3]',
    'top'
);  

...因为如果在 URL 中省略了颜色参数(这是有可能的),那么 Regex 就会失败。

我也尝试在正则表达式中将查询参数(颜色)和值(棕色)设为可选,但它仍然不起作用:

add_rewrite_rule( 
        '([\-\w+]*)/animal/([\w+]*)(\/color\/?)([\w+]*)',
         'index.php?pagename=$matches[1]animal=$matches[2]&$matches[3]=$matches[4]', 
        'top'
)

我的问题是:有没有办法使第二个查询参数可选?如果 URL 中省略了“颜色”参数,我希望页面做出适当的反应。

谢谢,

【问题讨论】:

    标签: regex wordpress url-rewriting


    【解决方案1】:

    在这种情况下,您需要制定两个单独的规则:

    add_rewrite_rule(
        '([\-\w+]*)/animal/([\w+]*)/?$', 
        'index.php?pagename=$matches[1]&animal=$matches[2]',
        'top'
    );  
    

    add_rewrite_rule(
        '([\-\w+]*)/animal/([\w+]*)/color/([\w+]*)', 
        'index.php?pagename=$matches[1]&animal=$matches[2]&color=$matches[3]',
        'top'
    );  
    

    【讨论】:

      猜你喜欢
      • 2015-12-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-12-26
      • 2012-08-22
      • 2012-11-21
      • 2023-03-27
      相关资源
      最近更新 更多