重写自定义分类插件-但仅父项

时间:2012-01-02 作者:deadlyhifi

我已经建立了一个称为“区域”的自定义层次分类法。

所以现在我有了,例如。url.com/region/leeds/

然而,我现在正在扩展到其他国家,所以我正在制作父级的region子类别。

我想重写父类别URL以丢失/region 反而变成

url.com/region/uk -> url.com/uk.

我可以使用WP_Rewrite 并钩住category_rewrite_rules 并检查分类法是否为父分类法,然后提供已编辑的URL?

2 个回复
最合适的回答,由SO网友:Tom J Nowell 整理而成

这是可能的,但是,所需的努力并不是微不足道的,也没有表现出来,我建议不要这样做。

您的区域分类法将具有类似以下内容的重写规则:

regions/(.+?)/?$ -> region: (.+?)
你想要的是类似的东西:

(.+?)/?$ -> region(.+?)
这里的问题是,这条规则并不仅仅是一个例子。com/uk它也抓住了这个例子。com/利兹示例。com/about页面示例。com/feed/etc太冗长了。

因此,没有通用的方法来做这件事。这意味着需要额外的规则和2个选项,这两个选项都会减慢解析URL的过程:

1: Define them all manually

这是迄今为止最快的方法。这里的代价是时间。

e、 g.:

uk -> region: uk
fr -> region: fr
或在代码中:

function custom_rewrite( $wp_rewrite ) {
    $feed_rules = array(
        \'uk\'    =>  \'index.php?region=uk\',
        \'fr\'    =>  \'index.php?region=fr\',
    );
    $wp_rewrite->rules = $feed_rules + $wp_rewrite->rules;
}
// refresh/flush permalinks in the dashboard if this is changed in any way
add_filter( \'generate_rewrite_rules\', \'custom_rewrite\' );
添加/编辑/删除永久链接后,您需要刷新永久链接才能使URL正常工作。

2: Do the above but dynamically

这里的问题是,这使得规则生成的成本更高,而且随着术语数量的增加,生成的成本也越来越高。这还意味着您需要向该分类术语的添加/编辑/删除挂钩添加一个挂钩,以便刷新永久链接,以便重新生成它们。

您需要获取区域分类法的所有术语并遍历它们,在添加到重写规则之前向数组中添加适当的条目。

What about the child terms?

您可以手动定义它们,也可以在循环中添加检查以重写为regions/TermNameGoesher。您可以执行此步骤,但WordPress可能会自动将浏览器重定向到更长的URL名称,例如region/uk/leeds,这可能是您喜欢的,也可能不是您喜欢的。

More details on rewrite rules

你可以在这里找到我对另一个问题的答案,这里有很多链接:

Pretty URL with add_query_var

此外,我还建议Monkeyman在开发过程中重写测试规则,以准确地了解URL所采用的规则以及变量的去向。你可以在上面链接的答案中找到该插件的链接

SO网友:Slam

很抱歉恢复一篇旧帖子,但为什么不将英国城市的子术语移出父术语呢region 并进入父术语uk, 甚至只需重命名并重新插入region 期限至uk? 那么就没有必要进行花哨的重写了。

输出将是url.com/ukurl.com/uk/leeds/ 并且具有更好的搜索引擎优化和人类可读性。

mod\\u rewrite将处理url重定向。

结束

相关推荐