从类别永久链接中删除/CATEGORY/的最好且最干净的方法?

时间:2010-12-29 作者:David

Possible Duplicate:
Remove parent category from permalink? Basically only have the child category?

我们已经看到了可以做到这一点的插件,还有许多人对代码进行了不同的修改。我们真的希望以最干净、最简单的方式实现这一点,而不必担心过时的插件或使用太多mod造成问题。

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

不确定这有多干净或容易,但似乎有效。这段代码基本上解决了这个问题和另一个关于从永久链接中删除父类别的问题。从一个插件获得了它,并决定只使用原始代码。

因此,permalinks只列出了最低的子类别。

首先,我们有:

实例com/类别/项目/书籍/

现在。。。

实例com/书籍

然而,RSS提要似乎不能使用这个较短的url,仍然需要长格式的url。(不确定是否有解决方案。)将下面的代码粘贴到函数中。php文件。我正在使用Wordpress 3.0+。

// Remove category base
add_filter(\'category_link\', \'no_category_parents\',1000,2);
function no_category_parents($catlink, $category_id) {
    $category = &get_category( $category_id );
    if ( is_wp_error( $category ) )
        return $category;
    $category_nicename = $category->slug;

    $catlink = trailingslashit(get_option( \'home\' )) . user_trailingslashit( $category_nicename, \'category\' );
    return $catlink;
}

// Add our custom category rewrite rules
add_filter(\'category_rewrite_rules\', \'no_category_parents_rewrite_rules\');
function no_category_parents_rewrite_rules($category_rewrite) {
    //print_r($category_rewrite); // For Debugging

    $category_rewrite=array();
    $categories=get_categories(array(\'hide_empty\'=>false));
    foreach($categories as $category) {
        $category_nicename = $category->slug;
        $category_rewrite[\'(\'.$category_nicename.\')/(?:feed/)?(feed|rdf|rss|rss2|atom)/?$\'] = \'index.php?category_name=$matches[1]&feed=$matches[2]\';
        $category_rewrite[\'(\'.$category_nicename.\')/page/?([0-9]{1,})/?$\'] = \'index.php?category_name=$matches[1]&paged=$matches[2]\';
        $category_rewrite[\'(\'.$category_nicename.\')/?$\'] = \'index.php?category_name=$matches[1]\';
    }
    // Redirect support from Old Category Base
    global $wp_rewrite;
    $old_base = $wp_rewrite->get_category_permastruct();
    $old_base = str_replace( \'%category%\', \'(.+)\', $old_base );
    $old_base = trim($old_base, \'/\');
    $category_rewrite[$old_base.\'$\'] = \'index.php?category_redirect=$matches[1]\';

    //print_r($category_rewrite); // For Debugging
    return $category_rewrite;
}

// Add \'category_redirect\' query variable
add_filter(\'query_vars\', \'no_category_parents_query_vars\');
function no_category_parents_query_vars($public_query_vars) {
    $public_query_vars[] = \'category_redirect\';
    return $public_query_vars;
}
// Redirect if \'category_redirect\' is set
add_filter(\'request\', \'no_category_parents_request\');
function no_category_parents_request($query_vars) {
    //print_r($query_vars); // For Debugging
    if(isset($query_vars[\'category_redirect\'])) {
        $catlink = trailingslashit(get_option( \'home\' )) . user_trailingslashit( $query_vars[\'category_redirect\'], \'category\' );
        status_header(301);
        header("Location: $catlink");
        exit();
    }
    return $query_vars;
}

结束

相关推荐

WordPress删除wp_List_Categories中最后一项的分隔符

我正在尝试删除最后一个分隔符(通常是<br/> 标记,但我将其从wp\\u list\\u categories的最后一个链接更改为“/”)。基本上我想要这个:类别1//类别2//类别3//看起来像这样:类别1//类别2//类别3以下是我当前使用的代码:<?php $cat_array = array(); $args = array( \'author\' => get_the_author_meta(\'id\'),&#x