Ich habe gesucht, hier ist das Ergebnis.
Ich baue eine neue WordPress-Site. Ich möchte, dass die meisten Posts keine Kategorie in der URL haben, sondern einfach www.site.com/title. Ich möchte jedoch, dass die Blog-Posts getrennt sind, also möchte ich www.site.com/blog/title. Ich hätte auch gerne die Option, in Zukunft weitere solcher Elemente hinzuzufügen, nur für bestimmte Kategorien, nicht für die gesamte Website.
Es gibt viele ähnliche Fragen hier auf Stackoverflow, aber die meisten haben 0 Antworten. Jeder Rat wäre toll. Ich habe es sogar versucht Erweiterte Permalinks ohne Glück.
Sie können das einfach über Einstellung > Permalinks tun und den Wert zu Allgemeine Einstellung > Benutzerdefinierte Struktur hinzufügen /blog/%postname%/
. Dort erhalten Sie den Blog-Beitrag, der über www.site.com/blog/title zugänglich ist.
Die erste Frage kann ich nicht nachvollziehen. Durch:
Ich möchte, dass die meisten Beiträge keine Kategorie in der URL haben
meinen Sie, www.site.com/category/category-name NICHT ZU HABEN? oder kein www.site.com/category/post?
BEARBEITEN #1
Um dies zu beantworten:
www.site.com/category/post ist das, was ich NUR für Blog-Posts mit der Kategorie „Blog“ möchte > wenn die Kategorie „Schuhe“ ist, möchte ich nicht, dass die Kategorie in der URL angezeigt wird. –
Erstens: Sie können den Permalink setzen /%postname%/
Daher haben alle Ihre Beiträge eine Website / einen Titel, der daher über diesen Link zugänglich ist
Zweitens: Sie müssen den Permalink so filtern, dass er sich für die Beiträge in der Kategorie „Blog“ anders verhält.
Versuche dies
add_filter( 'post_link', 'custom_permalink', 10, 2 );
function custom_permalink( $permalink, $post ) {
// Get the categories for the post
$categories = wp_get_post_categories( $post->ID );
foreach ( $categories as $cat ) {
$post_cat = get_category( $cat );
$post_cats[] = $post_cat->slug;
}
// Check if the post have 'blog' category
// Assuming that your 'Blog' category slug is 'blog'
// Change 'blog' to match yours
if ( in_array( 'blog',$post_cats ) ) {
$permalink = trailingslashit( home_url( 'blog/' . $post->post_name ) );
}
return $permalink;
}
Drittens: Sie müssen rewrite_rules filtern
add_filter( 'rewrite_rules_array', 'custom_rewrite_rule' );
function custom_rewrite_rule( $rules ) {
$new_rules = array(
'blog/([^/]+)/trackback/?$' => 'index.php?name=$matches[1]&tb=1',
'blog/([^/]+)/feed/(feed|rdf|rss|rss2|atom)/?$' => 'index.php?name=$matches[1]&feed=$matches[2]',
'blog/([^/]+)/(feed|rdf|rss|rss2|atom)/?$' => 'index.php?name=$matches[1]&feed=$matches[2]',
'blog/([^/]+)/comment-page-([0-9]{1,})/?$' => 'index.php?name=$matches[1]&cpage=$matches[2]',
'blog/([^/]+)(/[0-9]+)?/?$' => 'index.php?name=$matches[1]&page=$matches[2]'
);
$rules = $new_rules + $rules;
return $rules;
}
Gehen Sie zur Permalink-Einstellung und speichern Sie die Einstellung, um Ihre Umschreibungsregeln zu aktualisieren und die obigen Änderungen zu aktivieren
HINWEIS: Fügen Sie diese Funktionen zu Ihrem aktiven Design hinzu functions.php
Vorlage
HINWEIS: Ich habe es noch nicht getestet, aber so ändert man den Permalink. Ich habe auf ähnliche Weise meinen Permalink in Archiven und Suchergebnissen geändert.