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:
Mir gefiel diese Lösung:
Wenn Sie /category/
von der URL entfernen möchten, führen Sie die folgenden beiden Schritte aus:
/%category%/%postname%/
.
.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/ )
Kategorie-Basis festlegen:. (Punkt nicht /)
Sparen. 100% korrekt arbeiten.
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
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.
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.
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 );
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;
}
Das Plug-In, das nicht zur Kategorie gehört, hat bei mir nicht funktioniert.
Für Multisite-WordPress funktioniert Folgendes:
\
öffnen;/%category%/%postname%/
. Dadurch wird Ihre URL als www.domainname.com/categoryname/postname
angezeigt.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.Wenn Sie immer noch nach der Kombination suchen (Tags, Kategorien und Seiten auf der URL-Basis), können Sie dies wie ich tun.
.
) für die Kategorie- und Tag-Basis ( https://premium.wpmudev.org/blog/removing-category-base-urls-wordpress/ )Getestet mit Wordpress 3.9.1
Wenn Sie Seiten, Kategorien oder Tags haben, die denselben Namen haben, nimmt das System Folgendes in Anspruch:
add_action( 'init', 'remove_category_perma' );
function remove_category_perma() {
unset($GLOBALS['wp_rewrite']->extra_permastructs['category']);
}
WordPress 5.0.2:
So entfernen Sie den Kategorie-Slug aus vorhandenen Beiträgen:
/%category%/%postname%/
in: /%postname%/
. 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.
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:
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 . '/';
https://wordpress.org/plugins/remove-category-url/ Verwenden Sie dieses Plugin, um die category-base.__ vollständig auszublenden .
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