从URL中排除子类别

时间:2013-06-17 作者:prohomepageHUN

我们有一个网站的类别和子类别。

如果任何人导航到属于子类别的内容,url将具有以下格式:domain/main-category/sub-category/mycontent/ 但我们需要另一种形式:domain/main-category/mycontent 哪里mycontent 属于内部的子类别main-category, 但我们不希望子类别显示在URL中。

有什么可能的解决办法吗?

7 个回复
SO网友:Eckstein

如果转到“设置”->“永久链接”,您应该能够设置标签/类别基本URL规则,从而解决此问题。

或者,使用某种插件来做你想做的事情。这一条首先出现在谷歌上:http://wordpress.org/plugins/custom-permalinks/

SO网友:Amine Faiz

请尝试以下代码:

function remove_child_categories_from_permalinks( $category ) {
    while ( $category->parent ) {
        $category = get_term( $category->parent, \'category\' );
    }
    return $category;
}
add_filter( \'post_link_category\', \'remove_child_categories_from_permalinks\' );

SO网友:NicoHood

是的,你可以!只需选择帖子的主要类别。

很抱歉,这个截图是德语的,但它很能自我解释。这里我们有一个主要的群体;“一方”;带一个子组“;Rezepte(回复);。我们可以将url设置为“仅”/“一方”;通过选择该类别作为新的主目录。

Wordpress select primary category

<屏幕截图摘自WordPress 5.8

还要确保永久链接结构(设置->;永久链接)设置为/%category%/%postname%!

SO网友:Balas

你可以重写你.htaccess 如果你熟悉这一点。

添加以下行并尝试:

RewriteRule ^category/(.+)$ http://www.site.com/$1 [R=301,L]

SO网友:Kıvılcım

这应该很好。将此添加到函数末尾。php文件。

示例站点。com/wp-content/theme/yourtheme/functions。php<<;-就在那里。

// 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;
}

SO网友:Hasin Hayder

如果您使用的是WP Category permalink插件,请禁用它并将以下内容用作permalink自定义结构

/%category%/%postname%/

就是这样

SO网友:WooNinjas

只需转到:

www.example.com/wp-admin/options-permalink.php (Settings->Permalinks)
并选择/%category%/%postname%/

那应该可以了。!

结束

相关推荐

Dynamic Custom Permalinks

我有一个场景,其目的是创建可以动态更改的自定义永久链接,例如:如果显示国家信息,则URL应为http://example.com/country-information如果显示特定国家的城市信息,则URL应如下所示http://example.com/country/city-information. 我怎样才能做到这一点?