固定链接结构中的两个自定义分类

时间:2014-04-30 作者:SPi

我正在努力用自定义分类法设置自定义permalink结构。我在这里阅读了许多问题/答案,但我无法将其付诸实施(最令人沮丧的是,我不知道如何调试并自己找到问题)。非常感谢您的帮助!

What you need to know

<我有一个自定义的帖子类型,叫做items
  • items 有两种自定义分类法:
    • typeslocations. one typemultiple (1+) locations
    我正在尝试为每个item:

    http://domain.com/type/location

    然而,我只想在这个链接结构中使用第一个位置术语。

    我还没有尝试实现/location 链接结构的一部分(我想这有点复杂),因为我已经在努力/type/ 部分因此,我的代码目前看起来是这样的,这不会对我的永久链接产生任何更改:

    in a plugin

    register_post_type( \'item\',
            array(
                \'labels\'        => $labels,
                \'supports\'      => array( \'title\', \'editor\', \'thumbnail\', \'comments\'),
                \'public\'        => true,
                \'has_archive\'   => true,
                \'rewrite\'       => true,
                \'menu_icon\'    => plugins_url( \'/img/icon.png\'),
                \'menu_position\' => 42,
                \'categories\'    => array( ),
            )
        );
    
    
    register_taxonomy( \'types\', \'item\', array(
            \'labels\'       => $item_types_labels,
            \'hierarchical\' => true,
            \'query_var\'    => \'type\',
            \'rewrite\'      => true,
            \'public\'       => true,
            \'show_ui\'      => true,
        ) );
    

    in functions.php

    add_filter(\'post_link\', \'types_permalink\', 10, 3);
    add_filter(\'post_type_link\', \'types_permalink\', 10, 3);
    
    function types_permalink($permalink, $post_id, $leavename) {
        if (strpos($permalink, \'%types%\') === FALSE) return $permalink;
    
            // Get post
            $post = get_post($post_id);
            if (!$post) return $permalink;
    
            // Get taxonomy terms
            $terms = wp_get_object_terms($post->ID, \'types\');   
            if (!is_wp_error($terms) && !empty($terms) && is_object($terms[0])) $taxonomy_slug = $terms[0]->slug;
            else $taxonomy_slug = \'no-type\';
    
        return str_replace(\'%types%\', $taxonomy_slug, $permalink);
    }   
    
    我将永久链接结构设置为自定义结构/%types%/%postname%/. 我的URL仍然如下所示domain.com/item/postname.

    还有:无论我做什么/item/ (例如。domain.com/this-doesn-make-sense-to-me/postname), 我被重定向到domain.com/item/postname.

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

    第一个问题-设置中的永久链接结构仅适用于post post类型,因此您的post_type_link 函数没有%types% 要替换的标记。

    其次,除非您想要一个非常复杂(且性能较差)的解决方案,否则更简单的解决方案是在post类型slug中有一个静态前缀。使用URLhttp://domain.com/type/location/post-name/, WordPress无法知道您的要求。是type 包含子页的页location, 或者是types 分类术语?使用标准重写系统,一条规则始终优先,其他请求始终为404。使用URL格式http://domain.com/item/type/location/post-name/, WordPress会确切地知道你想要什么,因为只有一种帖子类型的前缀是item.

    至于细节,在您的post type注册中,设置slug 的参数rewrite 到所需URL的格式:

    \'rewrite\' => array( \'slug\' => \'item/%types%\' ),
    
    …和您的post_type_link 过滤器应该工作。如果要添加位置,只需将该标记添加到slug中,并添加代码来替换post_type_link 过滤器-

    \'rewrite\' => array( \'slug\' => \'item/%types%/%locations%\' ),
    

    结束

    相关推荐

    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-