清除Serach+自定义分类的自定义URL

时间:2017-12-11 作者:kater louis

我有一个自定义的分类法,叫做filter. 以下所有URL都指向archive.php 应该至少给我一个帖子。

  • /filter/bar 默认情况下有效,无需自定义规则/myCategory/filter/bar 使用我自己的自定义规则,很好
  • /search/foo 按我的自定义规则工作

  • /?s=foo&filter=bar 按预期工作

  • /search/foo/filter/bar BOOM! 没有条目,以下是我的规则:

    add_filter("rewrite_rules_array", function($rules) {
    
        $newRules = array();
    
        // ... more rules
    
        $newRules["search/(.+)/?$"] = \'index.php?s=$matches[1]\';
    
        $newRules["search/(.*)/filter/(.*)/?$"] = \'index.php?s=$matches[1]&filter=$matches[2]\';
    
        $merged = array_merge($newRules, $rules);
    
        return $merged;
    });
    
    <小时>

    EDIT

    所需URL的查询监视器(suche=德语搜索)

    enter image description here

1 个回复
最合适的回答,由SO网友:kater louis 整理而成

使用Slam的善意提示query-monitor plugin, 我能找出问题所在。

显然是url/search/foo/filter/bar 也符合“常规搜索”重写规则。有道理,想想看——(.+) 技术上匹配/foo/filter/bar 还有。所以我可以改进(.+) 通过排除/s

但我找到了一个更简单的解决方案!

在希望“首场比赛获胜”中,我在一般规则之前宣布了更具体的规则——瞧,它奏效了!

add_filter("rewrite_rules_array", function($rules) {

    $newRules = array();

    // more specific rule first
    $newRules["search/(.*)/filter/(.*)/?$"] = \'index.php?s=$matches[1]&filter=$matches[2]\';

    // general rule later
    $newRules["search/(.+)/?$"] = \'index.php?s=$matches[1]\';

    $merged = array_merge($newRules, $rules);

    return $merged;
});

结束

相关推荐

Search Media by taxonomy

如何根据前端的分类法搜索媒体?以下查询显示我希望通过搜索返回的内容:$args = array( \'post_type\' => \'attachment\', \'post_status\' => \'inherit\', // for PDFs \'post_mime_type\' => \'application/pdf\', // if you need PDFs from a specific media c