在自定义固定链接结构中添加%Taxonomy%

时间:2015-08-06 作者:ron r

默认情况下,WordPress支持自定义永久链接结构中的%category%标记。我需要在结构中使用%分类法。如何做到这一点?

有可用的过滤器吗?

1 个回复
SO网友:AddWeb Solution Pvt Ltd

在为“创建自定义帖子类型和自定义分类法”时,有一个数组选项"E;“重写”"E;您可以设置"E;“slug”"E;在那里你可以改变你的永久链接结构。

有关详细信息,请阅读here.

也是我从post 1post 2 其中一个帮助我闪现了一些想法。

1 Rewrite rule:您需要添加一个新的重写规则,以便Wordpress知道如何解释url结构。在我的例子中,uri的自定义post类型部分将始终是第5个uri段,因此我相应地定义了匹配规则。请注意,如果使用更多或更少的uri段,则可能必须更改此设置。如果您将有不同级别的嵌套术语,那么您需要编写一个函数来检查最后一个uri段是自定义post类型还是分类术语,以了解要添加的规则(如果您需要这方面的帮助,请询问我)。

add_filter(\'rewrite_rules_array\', \'mmp_rewrite_rules\');
function mmp_rewrite_rules($rules) {
    $newRules  = array();
    $newRules[\'basename/(.+)/(.+)/(.+)/(.+)/?$\'] = \'index.php?custom_post_type_name=$matches[4]\'; // my custom structure will always have the post name as the 5th uri segment
    $newRules[\'basename/(.+)/?$\']                = \'index.php?taxonomy_name=$matches[1]\'; 

    return array_merge($newRules, $rules);
}
2. Filter post type link:然后,您需要添加以下代码,以便让workpress能够在自定义post类型重写段塞结构中处理%taxonomy\\u name%:

function filter_post_type_link($link, $post)
{
    if ($post->post_type != \'custom_post_type_name\')
        return $link;

    if ($cats = get_the_terms($post->ID, \'taxonomy_name\'))
    {
        $link = str_replace(\'%taxonomy_name%\', get_taxonomy_parents(array_pop($cats)->term_id, \'taxonomy_name\', false, \'/\', true), $link); // see custom function defined below
    }
    return $link;
}
add_filter(\'post_type_link\', \'filter_post_type_link\', 10, 2);
3. Custom function:我创建了一个基于Wordpress自己的自定义函数get_category_parents.

// my own function to do what get_category_parents does for other taxonomies
function get_taxonomy_parents($id, $taxonomy, $link = false, $separator = \'/\', $nicename = false, $visited = array()) {    
    $chain = \'\';   
    $parent = &get_term($id, $taxonomy);

    if (is_wp_error($parent)) {
        return $parent;
    }

    if ($nicename)    
        $name = $parent -> slug;        
else    
        $name = $parent -> name;

    if ($parent -> parent && ($parent -> parent != $parent -> term_id) && !in_array($parent -> parent, $visited)) {    
        $visited[] = $parent -> parent;    
        $chain .= get_taxonomy_parents($parent -> parent, $taxonomy, $link, $separator, $nicename, $visited);

    }

    if ($link) {
        // nothing, can\'t get this working :(
    } else    
        $chain .= $name . $separator;    
    return $chain;    
}
4. Load again permalink setting page:然后你需要冲洗你的permalinks。

现在一切都“应该”了,希望如此!制作一组分类术语并正确嵌套,然后制作一些自定义帖子类型的帖子并正确分类。您还可以使用slug创建页面basename, 一切都应该按照我在问题中指定的方式进行。您可能希望创建一些自定义分类归档页面来控制它们的外观,并添加某种分类小部件插件来在侧栏中显示嵌套的类别。

Taxonomy widget.

希望这有帮助。

结束

相关推荐

Pretty Permalinks

我创建了自己的搜索功能,基本上可以找到与输入的邮政编码最近的商店。我的搜索URL当前如下所示http://www.example.com/stores?searchTerm=London, 这并不是真正的SEO友好。我希望我的URL采用以下格式-http://www.example.com/stores/London, 然而,由于我缺乏WordPress URL重写工作的知识,我正在努力解决这个问题,希望能得到一些帮助来解决这个问题。Stores是一个循环显示结果的页面。如果有人对如何做到这一点有任何想法