Übergeordnete Kategorie aus Permalink entfernen? Grundsätzlich nur die Kinderkategorie?

7

Ich denke, es gab früher ein veraltetes Plugin, um dies zu tun. Gibt es eine Möglichkeit, dies einfach mit nur einem kleinen Code zu tun? Wir ziehen es vor, uns nicht auf ein Plugin zu verlassen, da wir daher vom Entwickler abhängig sind, um es auf dem neuesten Stand zu halten.

Wir haben nur zwei übergeordnete Kategorien, die wir für alle Permalinks der untergeordneten Kategorie entfernen möchten: "Elemente" und "Genres" (es könnte also darauf zugeschnitten sein, nur zwei Kategorie-IDs zu entfernen).

Ich sehe , dass es eine Lösung mit dem einzelnen Posten war hier , aber ich glaube nicht , das funktioniert mit der Kategorie permalinks auch, nicht wahr?

David
quelle

Antworten:

6

Dieser Code erledigt so ziemlich die Aufgabe für diese und eine andere Frage zum Entfernen der / category / base aus den Permalinks. Ich habe es von einem Plugin erhalten, das dies tut, und habe beschlossen, nur den Rohcode zu verwenden.

In den Permalinks ist also nur die niedrigste untergeordnete Kategorie aufgeführt.

Zuerst hatten wir:

example.com/category/items/books/

und nun...

example.com/books

Die RSS-Feeds scheinen jedoch nicht mit dieser kürzeren URL zu funktionieren und erfordern immer noch die Langform-URL. (Ich bin mir nicht sicher, ob es eine Lösung dafür gibt.) Außerdem wird der Post-Permalink nicht geändert. Es ist nur die Kategorie Permalink, die sich ändert. Fügen Sie den folgenden Code in Ihre Datei functions.php ein. Ich verwende 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;
}
David
quelle
Schätzen Sie diese Antwort wirklich, da ich über 2 Stunden lang herumgegraben habe! Ich habe dies mit den Jungs von wordpress.org geteilt, da ich hoffe, dass dies anderen helfen kann! http://wordpress.org/support/topic/perfect-permalink-possible?replies=4#post-2214102
würde etwas ähnliches für Seiten funktionieren? wordpress.stackexchange.com/questions/173048/…
Codecowboy