it-swarm.com.de

Entfernen Sie die Kategorie- und Tag-Basis aus der WordPress-URL - ohne Plugin

Ich möchte die Kategorie- und Tag-Basis von 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 habe eine Lösung innerhalb von functions.php. Dies würde verhindern, dass zukünftige Plugin-Updates oder Wordpress-Standarddateien geändert werden. 

Jede Hilfe wäre dankbar. Vielen Dank!

Ich habe diese Lösungen bisher ausprobiert:

38
cosmoonot

Mir gefiel diese Lösung:

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

  1. Gehen Sie zu Einstellungen >> Permalinks und wählen Sie Benutzerdefiniert. Geben Sie Folgendes ein: /%category%/%postname%/
  2. Als Nächstes setzen Sie Ihre Kategoriebasis auf ..

Speichern Sie es, und Ihre URL wird in dieses Format geändert: Http: /yourblog.com/quotes/

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

47
optimiertes
  1. Benutzerdefinierte Struktur festlegen: /% postname% /
  2. Kategorie-Basis festlegen:. (Punkt nicht /)

  3. Sparen. 100% korrekt arbeiten.

17
user4414801

Während Sie es als Lösung ablehnen, 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 aktualisiert werden, sodass Probleme mit Aktualisierungen nicht unbedingt auftreten.

Es gibt keine einfache, von Hand gerollte Lösung, die all dies tut und nicht nur das repliziert, was das Plugin aus Ihrer eigenen functions.php macht

  • Bessere und logische Permalinks wie myblog.com/my-category/ und myblog.com/my-category/my-post/. 
  • Einfaches Plugin - fügt kaum zusätzlichen Aufwand hinzu. 
  • Funktioniert sofort - kein Setup erforderlich. Wordpress-Dateien müssen nicht geändert werden. 
  • Benötigt keine anderen Plugins. 
  • Kompatibel mit Sitemap-Plugins. 
  • Funktioniert mit mehreren Unterkategorien. 
  • Funktioniert mit WordPress Multisite. 
  • Leitet alte Kategorie-Permalinks zu den neuen weiter (301-Weiterleitung, gut für SEO).

Außerdem haben Sie den Vorteil, dass sich das Plugin bei einer Änderung von Wordpress aktualisiert, damit es funktioniert. Sie müssen dann selbst herausfinden, wie Sie Ihren eigenen Code selbst reparieren.

15
Anigel

Wenn Sie Yoast SEO plugin verwenden, gehen Sie einfach zu:

Advanced > Permalinks > Change URLs

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

In Bezug auf die Tag-Entfernung habe ich noch keine Lösung gefunden.

10
paulalexandru

setzen Sie dies stattdessen in Ihre functions.phpworks, 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/", "/", $string );
        return trailingslashit( $aa_g );
    }
    if ( $type == 'category' )
        return trailingslashit( $string );
}
return $string;
}

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

Der Punkt-Trick wird wahrscheinlich Ihre RSS-Feeds und/oder Paginierung ruinieren. Diese arbeiten 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, '/', 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, '/');
    $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, '/', 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, '/');
    $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;
}
3

Das Plug-In, das nicht zur Kategorie gehört, hat bei mir nicht funktioniert.

Für Multisite-WordPress funktioniert Folgendes:

  1. Wechseln Sie zu Netzwerk-Administrationssites.
  2. Website unter \ öffnen;
  3. Gehe zu den Einstellungen;
  4. Unter Permalinks Strukturtyp /%category%/%postname%/. Dadurch wird Ihre URL als www.domainname.com/categoryname/postname angezeigt.
  5. Gehen Sie jetzt zu Ihrem Website-Dashboard (nicht zum Netzwerk-Dashboard).
  6. Einstellungen öffnen;
  7. Permalink öffnen. Speichern Sie nicht (der Permalink zeigt das nicht editierbare Feld als yourdoamainname/blog/ an. Ignorieren Sie ihn. Wenn Sie jetzt speichern, wird die Arbeit, die Sie in Schritt 4 ausgeführt haben, überschrieben. Dieser Schritt des Öffnens der Permalink-Seite, aber nicht Speichern der Datenbank ist erforderlich.
2
Goutham

Wenn Sie immer noch nach der Kombination suchen (Tags, Kategorien und Seiten auf der URL-Basis), können Sie dies wie ich tun.

Getestet mit Wordpress 3.9.1

Wenn Sie Seiten, Kategorien oder Tags haben, die denselben Namen haben, nimmt das System Folgendes in Anspruch:

  1. etikett
  2. seite
  3. kategorie
2
SimonSimCity
add_action( 'init', 'remove_category_perma' );
function remove_category_perma() {
    unset($GLOBALS['wp_rewrite']->extra_permastructs['category']);
}
0
fdrv

WordPress 5.0.2:

So entfernen Sie den Kategorie-Slug aus vorhandenen Beiträgen:

  1. Navigieren Sie zu Einstellungen> Permalinks und ändern Sie die benutzerdefinierte Struktur von /%category%/%postname%/ in: /%postname%/
  2. Kategorie- und Tag-Basen leer lassen (was auch die Standardeinstellung ist)
  3. Sparen

Alle Posts können jetzt direkt über domain.com/%postname%/ und alle Kategorien über domain.com/category/xyz/ aufgerufen werden. WordPress fügt automatisch alle 301 Weiterleitungen für die alten URLs hinzu. Wenn also jemand auf domain.com/%category%/%postname%/ zugreift, wird er automatisch zu domain.com/%postname%/ weitergeleitet.

0
Nadeem Khan

Ich weiß nicht, wie man es mit Code macht, aber für diejenigen, denen die Verwendung eines Plugins nichts ausmacht. Dies ist eine großartige Sache, die für mich funktioniert:

https://es.wordpress.org/plugins/permalink-manager/

0
Jmainol

aktualisierte Antwort:

andere Lösung:
In der Datei wp-includes/rewrite.php sehen Sie den Code:
$this->category_structure = $this->front . 'category/'; kopiere einfach die ganze Funktion, füge deine functions.php ein und hänge sie an. ändere einfach die obige Zeile mit:
$this->category_structure = $this->front . '/';

0
T.Todua

https://wordpress.org/plugins/remove-category-url/ Verwenden Sie dieses Plugin, um die category-base.__ vollständig auszublenden .

0
Girish

Wählen Sie in Permalinks die Option Benutzerdefinierte Struktur aus und fügen Sie /% category% /% postname%/nach Ihrer Domain hinzu. Das Hinzufügen von "/" zur Kategorienbasis funktioniert nicht, Sie müssen einen Punkt/Punkt hinzufügen. Ich habe hier ein Tutorial geschrieben: Kategorie aus URL-Tutorial entfernen

0
Jonny Jordan