添加重写规则未按预期返回

问题描述 投票:0回答:1

我在WordPress的functions.php文件中有以下代码片段:

add_action('init', function() {
    add_rewrite_rule('^explore-destinations\/?(.*)','index.php?tt_destination=$matches[1]', 'bottom');
});

当我的网址为:https://example.com/explore-destinations/north-america/illinois/https://example.com/explore-destinations/north-america/illinois/chicago时效果很好。 我有一个过滤器,可以正确设置 query_vars tt_destination 并将其解析为查询变量,然后相应地构建/返回页面。 例如,上面第二页中的查询变量设置为:north-america\/united-states\/illinois\/chicago,我可以使用它来指导正确的页面模板并呈现内容。

令我困惑的是以下网址:https://example.com/explore-destinations/north-america/ 返回空白。 我正在寻找它返回大陆(例如北美)。

任何人都可以就我做错的事情提供建议吗? 预先感谢。

我尝试了正则表达式字符串的各种阴谋,但没有成功——例如探索目的地\/?(.*) 或 ^探索目的地?(.*)

我尝试在更改代码后重建永久链接,但没有成功。

php regex wordpress wordpress-theming custom-wordpress-pages
1个回答
0
投票

我发现了问题所在。 有一个原生的重写规则

[^/]+/([^/]+)/?$

这优先于我的重写规则。 这使它看起来像一个附件。 我将以下代码添加到functions.php以删除本机规则:

add_filter( 'rewrite_rules_array', 'remove_attachment_rewrite_rules' );
function remove_attachment_rewrite_rules( $rules ) {
    // echo var_dump($rules);
  foreach ( $rules as $rule => $rewrite ) {
    if (  $rule =='[^/]+/([^/]+)/?$' ) {
      unset( $rules[$rule] );
    }
  }
  
  return $rules;
}
© www.soinside.com 2019 - 2024. All rights reserved.