如何实现干净的定制永久链接解决方案?

时间:2014-07-09 作者:WPRookie82

我正在设计一个博客,其类别层次结构如下(只是一个示例)

                                          PARENT
                                             |
                     |------------------------------------------------|
                   Food                                           Fashion
                     |                                                |
          |---------------------|                       |---------------------|
      European                Asian                  European               Asian
          |                     |                       |                     |
    |---------|           |-----------|             |--------|           |--------|
Italian    French      Chinese    Japanese       Italian  French     Chinese   Japanese

客户将在食品和时尚博客上发布按国家分类的帖子。这意味着一篇关于意大利比萨饼的帖子将放在“家长>食品>欧洲>意大利”下

我的问题是permalinks,因为客户需要以下类别结构:

  1. http://www.mydomain.com = 博客主页,各行各业的零碎http://www.mydomain.com/food = 食品子主页,食品下所有子类别的碎片http://www.mydomain.com/fashion = 时尚子主页,时尚下所有子类别的零碎http://www.mydomain.com/european = 欧洲子主页,食品和时尚下所有欧洲子类别的碎片http://www.mydomain.com/european/food = 欧洲食品子主页,食品>欧洲子类别的碎片http://www.mydomain.com/european/italian/food = 意大利食品子主页,来自食品>欧洲>意大利子类别的碎片。

    以及职位结构:

    1. http://www.mydomain.com/european/italian/food/25115886/how-to-bake-the-right-pizza

    2. http://www.mydomain.com/european/italian/fashion/25175191/milan-fashion-show-in-june

      因此,我尝试在模板的函数中使用以下代码进行测试。php文件:

      add_filter( \'category_link\', \'bloglinks\', 10, 2 );
      
      function bloglinks( $catlink, $category_id )
      {
      }
      
      我正在考虑对函数中的类别ID(永远不会更改)进行检查,并构建我想要的永久链接。

      但是,这是进行所有编码的正确位置吗?我会破坏插件之类的东西吗。?

2 个回复
SO网友:Katrina

WP允许您通过以下方式添加自定义重写规则WP_Rewrite - 使用它们,你几乎可以实现任何你想要的东西——如果你喜欢RegEx,那将是轻而易举的事。

WordPress需要触发器来识别您请求的页面类型,因此它是默认/类别/匹配规则以及其他许多规则。

如果打印出以下内容,则可以查看所有当前重写规则:

global $wp_rewrite;
echo \'<pre>\';
print_r($wp_rewrite);
echo \'</pre>\';
你要做的就是把你的食物、时尚、欧洲和亚洲鼻涕虫搭配起来,就像它是类别触发词一样。

我以前也做过类似的事情,一旦你开始使用它,你会发现将链接结构与正确的查询匹配起来相当容易,因为所有关于你所请求的页面类型的参数都是通过index.php?key=value 配对。最好自己看看,打印出$wp\\U重写。

下面是我以前使用过的一个简化示例,请将其添加到函数中。php:

if ( !function_exists(\'client_rewrite_rules\') ) {
    function client_rewrite_rules() {
        global $wp_rewrite;
        $new_rules = array(
        // add all your rules here, mine below, store|restaurant|bar were my custom taxonomies
        \'(store|restaurant|bar)/(.+?)/(store|restaurant|bar)/(.+?)/?$\' => \'index.php?\' . $wp_rewrite->preg_index(1) . \'=\' . $wp_rewrite->preg_index(2) . \'&\' . $wp_rewrite->preg_index(3) . \'=\' . $wp_rewrite->preg_index(4),
        \'(store|restaurant|bar)/(.+?)/?$\' => \'index.php?\' . $wp_rewrite->preg_index(1) . \'=\' . $wp_rewrite->preg_index(2)
        );
        $wp_rewrite->rules = $new_rules + $wp_rewrite->rules;
    }
    add_action(\'generate_rewrite_rules\', \'client_rewrite_rules\');
}
您的类别规则如下:

\'(food|fashion|european|asian)/?$\' => \'index.php?category_name=\' . $wp_rewrite->preg_index(1)
要记住的一件事是,每次更改规则时,都必须刷新规则才能生效。测试时,将以下代码保留在函数中,但在完成后将其取出:

$wp_rewrite->flush_rules();
刷新重写规则的另一种方法是访问设置/永久链接管理页面。

一旦永久链接返回您想要的结果,您将需要创建一个输出链接结构的自定义函数。我有很多分类法,所以类别链接要求我通过分类法和slug。

if ( !function_exists(\'client_category_permalink\') ) {
    function client_category_permalink( $linkTax = null, $linkTerm = null ) {
        // Bunch of functionality constructing your pretty $url
        return trailingslashit($url);
    }
}
然后,只要有链接,就可以添加:

<a href"<?php client_category_permalink(\'restaurant\', \'heston-blumenthal\'); ?>">Heston Blumenthal</a>
祝你好运,凯特

PS:如果其他人有一个不使用任何插件的替代解决方案,我会很感兴趣

SO网友:EliasNS

这就是我要做的。

我想the problem is with the data organization. 我认为您至少需要2个分类法,而不仅仅是一个(类别)。一个用于国家/地区,另一个用于主题(时尚和食品)。因此,您将获得:

每个主题的存档,如http://www.example.com/foodhttp://www.example.com/europe 甚至http://www.example.com/europe/italian.如果你想要一个混合存档,你应该制作一个搜索表单,这样你就可以http://www.example.com/search/?country=italia&topic=food.

对于第二种分类法,可以使用Tags 或aCustom Taxonomy.

结束

相关推荐

Custom permalinks structure

我希望有这样的结构:www.mysite.com/2013 (必须显示2013年的所有职位)www.mysite.com/my-category/2013 (必须显示2013年和“我的类别”类别的所有帖子)www.mysite.com/my-category/my-tag/ (必须显示所有类别为“我的类别”和标记为“我的标记”的帖子)www.mysite.com/my-category/ (必须显示“我的类别”类别的所有帖子)www.mysite.com/my-