禁用WordPress将路径识别为附件

时间:2018-01-19 作者:luukvhoudt

每当您输入一个包含两个不存在的路径段的URL时,WordPress将自动将查询解析为附件。

如何复制永久链接结构/%postname%/./foo/bar 确保“foo”不是现有的分类法或帖子类型pre_get_posts 并将global $wp_query.post_type = \'attachment\' 查询和其他一些附件相关信息NOTE: 我不确定我在第2步和第5步中所做的陈述。

为什么要在乎

我发现处理这种默认行为很烦人,真的很想以某种方式禁用它,如果你知道怎么做,请告诉我。这使得不可能实现某些永久性结构。你可能也想知道的地方。我正在尝试实现一个永久链接结构,其中当前的post-slug是slug这个词的前缀。例如,post类型“example”有post“bar”,它与一个带有slug“foo”的术语有关系。与其定义permalink“示例/条形图”,不如将其定义为“foo/条形图”。

1 个回复
SO网友:luukvhoudt

在进一步了解了默认perma结构以及如何修改它之后,我偶然发现了这个钩子rewrite_rules_array. 这个钩子允许您过滤重写规则数组,WordPress中的URL重写规则数组有助于确定要加载的内容类型。

这是禁用将路径识别为附件的默认行为的好地方。这就是如何摆脱附件的所有重写规则,从而消除将路径识别为附件的所有行为。

add_filter(\'rewrite_rules_array\', function($rules) {
    foreach ($rules as $rule => $url) {
        if (strpos($url, \'attachment\') !== false) {
            unset($rules[$rule]);
        }
    }
    return $rules;
});
我不确定所有其他规则,我肯定想检查一下。例如:

"(.?.+?)(?:/([0-9]+))?/?$" => "index.php?pagename=$matches[1]&page=$matches[2]"
"([^/]+)(?:/([0-9]+))?/?$" => "index.php?name=$matches[1]&page=$matches[2]"
将帮助您识别页面,了解您是否只想使用页面非常有用。但请记住,如果只使用这些键/值重写数组,则还会重写(删除)新规则,例如自定义帖子类型的规则。

NOTE: 只能在WordPress后端的Settings>Permalinks页面上调试此过滤器。

结束

相关推荐

Taxonomy Pagination Rewrite

我有一个名为“推荐信”的自定义帖子类型,其中包含reviews. 我还有一个名为“推荐部门”的分类法reviews. 目标是我将拥有像/reviews/sales/ 或/reviews/service/. 除了分页之外,一切都按照我的意愿进行。我尝试了所有不同的提示和技巧,以使分页按预期工作,但不管怎样/reviews/sales/page/2 就是不管用。但是,如果我手动输入/reviews/sales/?page=2 正如人们所期望的那样,这将导致第二页的结果。是否有允许我使用查询字符串的重写规则?p