Kategorie und Tag-Basis ohne Plugin aus WordPress-URLs entfernen?

Lesezeit: 8 Minuten

Cosmonots Benutzeravatar
Kosmonot

Ich möchte die Kategorie- und Tag-Basis aus der WordPress-URL entfernen. Ich bin auf andere Beiträge und Lösungen gestoßen, die Plugins verwendeten. Ich möchte mich von Plugins fernhalten und eine Lösung aus der Datei „functions.php“ heraus finden. Dies würde verhindern, dass zukünftige Plugin-Updates oder WordPress-Standarddateien geändert werden.

Jede Hilfe wäre dankbar. Danke!

Diese Lösungen habe ich bisher ausprobiert:

  • Haben Sie endlich eine gute Lösung gefunden, um die Tag-Basis aus der URL zu entfernen?

    – JonSnow

    8. April 2021 um 14:28

optimiertes Benutzeravatar
optimiertes

Wenn Sie entfernen möchten /category/ Führen Sie ausgehend von der URL die folgenden beiden Schritte aus:

  1. Gehen Sie zu Einstellungen >> Permalinks, wählen Sie Benutzerdefiniert und geben Sie Folgendes ein: /%category%/%postname%/
  2. Als nächstes stellen Sie Ihre Kategoriebasis auf ein .

Speichern Sie es und Sie werden sehen, dass Ihre URL in dieses Format geändert wurde:
http://yourblog.com/quotes/

(Quelle: http://premium.wpmudev.org/blog/daily-tip-quick-trick-to-remove-category-from-wordpress-url/)

  • Die neueste Version von WP (V.4, zumindest in meinem Fall)scheint es nicht zu erlauben / für die Kategoriebasis festgelegt werden. Schlagen Sie vor, stattdessen die Antwort von @Robbert zu verwenden.

    – Giraldi

    11. Januar 2015 um 2:56

  • Bei Verwendung dieser Lösung (WP 4.4.2, Verwendung von . als Kategoriebasis) wird die Paginierung unterbrochen, wenn eine Seite zum Auflisten der mit einer bestimmten Kategorie gekennzeichneten Beiträge verwendet wird.

    – Butterservietten

    27. Februar 2016 um 22:14

  • Ich kann bestätigen, dass dies in 4.6.1 beim Umgang mit der Paginierung zu Problemen führt.

    – Der unbekannte Entwickler

    28. Okt. 2016 um 13:20 Uhr

  • Um das zu entfernen /./ Verwenden Sie für Links diesen Filter:add_filter( 'term_link', function($termlink){ return str_replace('/./', '/', $termlink); }, 10, 1 );

    – jave.web

    11. März 2017 um 0:28

  • Dadurch wird die Paginierung unterbrochen. Sie erhalten den Fehler 404, wenn Sie versuchen, zu /page/2 zu navigieren

    – Emeka Mbah

    11. August 2017 um 11:10 Uhr

paulalexandrus Benutzeravatar
paulalexandru

Wenn du benutzt Yoast SEO Plugin gehen Sie einfach zu:

Search Appearance > Taxonomies > Category URLs.

Und auswählen remove aus Strip the category base (usually /category/) from the category URL.

Bezüglich der Tag-Entfernung habe ich noch keine Lösung gefunden.

  • Seit dem 13. April 2017 beeinträchtigt die „Punkt“-Methode hierfür viele Funktionen von WordPress 4.6 und höher. Mit anderen Worten: Es ist keine praktikable Lösung mehr. Yoast schafft dies jedoch mühelos. Installieren Sie das Plugin, aktivieren Sie die Funktion und es funktioniert einwandfrei. Außerdem erhalten Sie ein großartiges Plugin, mit dem Sie einen Großteil Ihrer Website verwalten können. Win Win!

    – Benutzer658182

    13. April 2017 um 18:08 Uhr

  • Möglicherweise wird auch hinzugefügt, dass die „Seiten mit erweiterten Einstellungen“ auf der Registerkarte „Funktionen“ des Plugins in seiner aktuellen Version aktiviert werden müssen.

    – Matt

    1. Juni 2017 um 14:05 Uhr

  • Aber die Frage ist, wie schafft man es ohne Plugin?

    – Daniel

    20. Januar 2018 um 7:31 Uhr

  • Was ist mit TAG??

    – Kamran Asgari

    19. Dezember 2018 um 5:36 Uhr

  • In neueren Versionen (getestete Version 9) ist diese Option jetzt unter versteckt Search Appearance > Taxonomies > Category URLs.

    – leymannx

    2. April 2019 um 11:06 Uhr


Anigels Benutzeravatar
Angel

Auch wenn Sie es als Lösung abtun, ist das Plugin bei weitem die einfachste und konsistenteste Methode und es werden keine WordPress-Standarddateien geändert.

http://wordpress.org/plugins/wp-no-category-base/

Es musste seit einem Jahr nicht mehr aktualisiert werden, sodass es bei Updates nicht unbedingt zu Problemen kommt.

Es gibt keine einfache, von Hand erstellte Lösung, die all dies kann und nicht nur die Funktionen des Plugins in Ihrer eigenen „functions.php“ nachbildet

  • Bessere und logische Permalinks wie myblog.com/my-category/ und myblog.com/my-category/my-post/.
  • Einfaches Plugin – verursacht kaum zusätzlichen Aufwand.
  • Funktioniert sofort – keine Einrichtung erforderlich. Keine Notwendigkeit, WordPress-Dateien zu ändern.
  • Erfordert keine anderen Plugins, um zu funktionieren.
  • Kompatibel mit Sitemap-Plugins.
  • Funktioniert mit mehreren Unterkategorien.
  • Funktioniert mit WordPress Multisite.
  • Leitet alte Kategorie-Permalinks auf die neuen um (301-Weiterleitung, gut für SEO).

Außerdem haben Sie den Vorteil, dass bei einer Änderung von WordPress das Plugin aktualisiert wird, damit es funktioniert, während Sie dann selbst herausfinden müssen, wie Sie Ihren eigenen Code reparieren können.

  • Plugin funktioniert gut. Ich bin immer noch daran interessiert, alternative Lösungen zu sehen.

    – Kosmonot

    23. Juli 2013 um 17:58

  • Hier ist eine aktuellere Alternative: Kategorie-URL entfernen

    – Giraldi

    13. Januar 2015 um 12:15

  • Zu viele Plugins auf einer Website verursachen Probleme und erschweren die Verwendung der Versionskontrolle (wie Git) mit einem WordPress-Theme. Daher würde man im Idealfall darauf verzichten

    – timhc22

    29. April 2015 um 14:18

  • Op fragte nach einer Antwort „ohne Plugin“

    – Alexander Holsgrove

    28. Dezember 2016 um 16:36 Uhr

  • Plugin existiert nicht mehr

    – Stender

    13. Februar 2018 um 13:09 Uhr

  1. Benutzerdefinierte Struktur festlegen: /%postname%/
  2. Kategoriebasis festlegen: . (Punkt nicht /)

  3. Speichern. Funktioniert zu 100 % korrekt.

Fügen Sie dies stattdessen in Ihre „functions.php“ ein. Funktioniert einwandfrei, keine Weiterleitungsprobleme.

function fix_slash( $string, $type )
{
global $wp_rewrite;
if ( $wp_rewrite->use_trailing_slashes == false )
{
    if ( $type != 'single' && $type != 'category' )
        return trailingslashit( $string );

    if ( $type == 'single' && ( strpos( $string, '.html/' ) !== false ) )
        return trailingslashit( $string );

    if ( $type == 'category' && ( strpos( $string, 'category' ) !== false ) )
    {
        $aa_g = str_replace( "/category/", "https://stackoverflow.com/", $string );
        return trailingslashit( $aa_g );
    }
    if ( $type == 'category' )
        return trailingslashit( $string );
}
return $string;
}

add_filter( 'user_trailingslashit', 'fix_slash', 55, 2 );

  • Tolle Lösung ohne Plugin! Genau das, was ich brauchte!

    – Giraldi

    11. Januar 2015 um 2:57


  • Das oben Gesagte scheint jedoch nicht zu funktionieren Unterkategorienobwohl… zB. www.site.com/main-category/sub-category/. Es wurde eine 404-Fehlerseite zurückgegeben

    – Giraldi

    13. Januar 2015 um 12:25

  • @Robbert Warum ist diese Prüfung genau nötig?: if ( $wp_rewrite->use_trailing_slashes == false )........

    – T.Todua

    21. April 2015 um 15:19 Uhr


  • Bringt mir nichts.

    – BadHorsie

    18. August 2017 um 15:37 Uhr

Benutzer-Avatar von DaFois
DaFois

Der Punkttrick wird wahrscheinlich Ihre RSS-Feeds und/oder Paginierung ruinieren. Diese funktionieren jedoch:

add_filter('category_rewrite_rules', 'no_category_base_rewrite_rules');
function no_category_base_rewrite_rules($category_rewrite) {
    $category_rewrite=array();
    $categories=get_categories(array('hide_empty'=>false));
    foreach($categories as $category) {
        $category_nicename = $category->slug;
        if ( $category->parent == $category->cat_ID )
            $category->parent = 0;
        elseif ($category->parent != 0 )
            $category_nicename = get_category_parents( $category->parent, false, "https://stackoverflow.com/", true ) . $category_nicename;
        $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]';
    }
    global $wp_rewrite;
    $old_base = $wp_rewrite->get_category_permastruct();
    $old_base = str_replace( '%category%', '(.+)', $old_base );
    $old_base = trim($old_base, "https://stackoverflow.com/");
    $category_rewrite[$old_base.'$'] = 'index.php?category_redirect=$matches[1]';
    return $category_rewrite;
}

// remove tag base
add_filter('tag_rewrite_rules', 'no_tag_base_rewrite_rules');
function no_tag_base_rewrite_rules($tag_rewrite) {
    $tag_rewrite=array();
    $tags=get_tags(array('hide_empty'=>false));
    foreach($tags as $tag) {
        $tag_nicename = $tag->slug;
        if ( $tag->parent == $tag->tag_ID )
            $tag->parent = 0;
        elseif ($tag->parent != 0 )
            $tag_nicename = get_tag_parents( $tag->parent, false, "https://stackoverflow.com/", true ) . $tag_nicename;
        $tag_rewrite['('.$tag_nicename.')/(?:feed/)?(feed|rdf|rss|rss2|atom)/?$'] = 'index.php?tag=$matches[1]&feed=$matches[2]';
        $tag_rewrite['('.$tag_nicename.')/page/?([0-9]{1,})/?$'] = 'index.php?tag=$matches[1]&paged=$matches[2]';
        $tag_rewrite['('.$tag_nicename.')/?$'] = 'index.php?tag=$matches[1]';
    }
    global $wp_rewrite;
    $old_base = $wp_rewrite->get_tag_permastruct();
    $old_base = str_replace( '%tag%', '(.+)', $old_base );
    $old_base = trim($old_base, "https://stackoverflow.com/");
    $tag_rewrite[$old_base.'$'] = 'index.php?tag_redirect=$matches[1]';
    return $tag_rewrite;
}

// remove author base
add_filter('author_rewrite_rules', 'no_author_base_rewrite_rules');
function no_author_base_rewrite_rules($author_rewrite) { 
    global $wpdb;    
    $author_rewrite = array();    
    $authors = $wpdb->get_results("SELECT user_nicename AS nicename from $wpdb->users");    
    foreach($authors as $author) {
        $author_rewrite["({$author->nicename})/(?:feed/)?(feed|rdf|rss|rss2|atom)/?$"] = 'index.php?author_name=$matches[1]&feed=$matches[2]';
        $author_rewrite["({$author->nicename})/page/?([0-9]+)/?$"] = 'index.php?author_name=$matches[1]&paged=$matches[2]';
        $author_rewrite["({$author->nicename})/?$"] = 'index.php?author_name=$matches[1]';
    }      
    return $author_rewrite;}
add_filter('author_link', 'no_author_base', 1000, 2);
function no_author_base($link, $author_id) {
    $link_base = trailingslashit(get_option('home'));
    $link = preg_replace("|^{$link_base}author/|", '', $link);
    return $link_base . $link;
}

  • Tolle Lösung ohne Plugin! Genau das, was ich brauchte!

    – Giraldi

    11. Januar 2015 um 2:57


  • Das oben Gesagte scheint jedoch nicht zu funktionieren Unterkategorienobwohl… zB. www.site.com/main-category/sub-category/. Es wurde eine 404-Fehlerseite zurückgegeben

    – Giraldi

    13. Januar 2015 um 12:25

  • @Robbert Warum ist diese Prüfung genau nötig?: if ( $wp_rewrite->use_trailing_slashes == false )........

    – T.Todua

    21. April 2015 um 15:19 Uhr


  • Bringt mir nichts.

    – BadHorsie

    18. August 2017 um 15:37 Uhr

Kiherus Benutzeravatar
Kiheru

Das Nicht-Kategorie-Plugin hat bei mir nicht funktioniert.

Für Multisite WordPress funktioniert Folgendes:

  1. Gehen Sie zu den Netzwerkadministrationsseiten.
  2. Öffnen Sie die Seite unter \;
  3. Gehe zu den Einstellungen;
  4. Unter Permalinks-Strukturtyp /%category%/%postname%/. Dadurch wird Ihre URL als angezeigt www.domainname.com/categoryname/postname;
  5. Gehen Sie nun zu Ihrem Site-Dashboard (nicht zu Ihrem Netzwerk-Dashboard);
  6. Einstellungen öffnen;
  7. Permalink öffnen. Nicht speichern (der Permalink zeigt das nicht bearbeitbare Feld als an). yourdoamainname/blog/. Ignoriere es. Wenn Sie jetzt speichern, wird die in Schritt 4 durchgeführte Arbeit überschrieben. Dieser Schritt, bei dem die Permalink-Seite geöffnet, aber nicht gespeichert wird, ist zum Aktualisieren der Datenbank erforderlich.

1450650cookie-checkKategorie und Tag-Basis ohne Plugin aus WordPress-URLs entfernen?

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy