Ähnliche Fragen wurden bereits gestellt, aber keine Antwort passt gut.
Ich habe: site.com/parent-page/child-page
und möchte:site.com/child-page
Daher möchte ich ausschließlich Permalinks mit der Tiefe 1 haben, ohne das benutzerdefinierte Menü zu verwenden, aber trotzdem meine Seiten in der Ansicht "Alle Seiten des Administrators" und mit übergeordneten / geordneten Seitenattributen "hierarchisieren".
Die Lösung muss auch automatisch funktionieren, damit Permalinks nicht auf jeder Seite mit dem Plugin "Benutzerdefinierte Permalinks" geändert werden.
Dies ist, was ich brauche, und ich bin sicher, dass es mit ein paar Codezeilen in der möglich ist functions.php
, die ich an anderer Stelle gefunden habe, aber nur für Beiträge, um die Kategorie zu entfernen, aber nicht für Seiten, um die übergeordneten zu entfernen.
Dies ist ein solcher Code, der möglicherweise geändert werden kann, um für Seiten zu funktionieren ?
add_filter( 'post_link', 'remove_parent_cats_from_link', 10, 3 );
function remove_parent_cats_from_link( $permalink, $post, $leavename ) {
$cats = get_the_category( $post->ID );
if ( $cats ) {
// Make sure we use the same start cat as the permalink generator
usort( $cats, '_usort_terms_by_ID' ); // order by ID
$category = $cats[0]->slug;
if ( $parent = $cats[0]->parent ) {
// If there are parent categories, collect them and replace them in the link
$parentcats = get_category_parents( $parent, false, '/', true );
// str_replace() is not the best solution if you can have duplicates:
// example.com/luxemburg/luxemburg/ will be stripped down to example.com/
// But if you don't expect that, it should work
$permalink = str_replace( $parentcats, '', $permalink );
}
}
return $permalink;
}
quelle
tl; dr = Installiere das kostenlose Plugin " Permalinks Customizer ". Setzen Sie "PostTypes-Einstellungen" für Seiten auf " % postname% " und bearbeiten Sie die Seiten, um die entsprechenden Permalinks entsprechend zu ändern. Ich habe dies mit einem Szenario von hierarchischen und nicht hierarchischen Seiten getestet, und ivt funktioniert ohne Schwierigkeiten.
Die längere Antwort
Das Szenario des OP basiert auf einer generischen Seite und stellt meiner Ansicht nach eine erhebliche, möglicherweise unmögliche Herausforderung dar, da die Lösung anonym angewendet werden muss. Das heißt, es gibt keinen vorhersehbaren "Trigger" oder "Handle", mit dem ein Umschreiben erstellt werden kann, mit dem eine gültige Anforderung erstellt wird. Ein benutzerdefinierter Beitragstyp funktioniert möglicherweise (oder nicht), aber das OP hat dies als diese Option ausgeschlossen. Der vom OP vorgeschlagene Ansatz birgt auch das Risiko doppelter Seiten. In Anbetracht all dessen könnte man vorschlagen, dass der vom OP vorgeschlagene Ansatz weder lohnenswert noch klug ist - aber ich überlasse es dem OP, sich selbst zu beurteilen.
Das OP ist ganz richtig; Die von Nicu vorgeschlagene Antwort funktioniert nicht, da diese Linie den Uri aus der ursprünglichen Abstammung aufbaut.
Ich habe ( erfolglos ) an einem Filter gearbeitet, der die Anforderungen des OP erfüllt. Ich biete es hier nur für den Fall an, dass es für jemand anderen nützlich sein könnte. Zu Referenzzwecken wurden alle meine Tests mit Permalinks durchgeführt, die auf "Post Name" eingestellt waren, und jedes Mal, wenn ich einen Filter anpasste, habe ich die Permalinks-Seite aktualisiert. Ich habe vier Seiten erstellt. Vorfahren, Eltern (Eltern = 'Vorfahren'), Kinder (Eltern = 'Eltern') und Transport (keine Eltern).
Ich fand, dass das Erstellen des Uri der einfache Teil ist oder zumindest einfach zu sein scheint. Diese Alternative (in functions.php) funktioniert:
Sowohl die Seiten "Vorfahren" als auch "Transport" werden normal geöffnet.
Auf den Seiten "Eltern" und "Kinder" (jeweils mit einer "Eltern" -Seite) werden 404 Fehler angezeigt.
Wenn Sie sich die Anforderungsabfrage ansehen (siehe unten), ist es offensichtlich, dass der 404 generiert wird, weil WordPress die "Seite" als "Beitrag" interpretiert und kein solcher Beitrag existiert. Beachten Sie, dass die Post-ID in den fehlgeschlagenen Abfragen nicht verwendet wird. Vielleicht ist dies der Schlüssel zu einem erfolgreichen Umschreiben, aber es war jenseits meiner Möglichkeiten.
Als Referenz sind dies "Anforderungs" -Details für "Abstammung":
Übereinstimmende Abfrage = 'Seitenname = Vorfahr & Seite ='
Übereinstimmende Regel = '(.?. +?) (?: / ([0-9] +))? /? $‘
Haupt Abfrage = SELECT wp_posts. * FROM wp_posts WHERE 1 = 1 und (wp_posts.ID = '46') und wp_posts.post_type = 'Seite' ORDER BY wp_posts.post_date DESC
Im Vergleich dazu sind dies "Anforderungs" -Details für "Kinder":
Übereinstimmende Abfrage = 'Name = Kinder & Seite ='
Übereinstimmende Regel = '([^ /] +) (?: / ([0-9] +))? /? $‘
Haupt Abfrage = SELECT wp_posts. * FROM wp_posts WHERE 1 = 1 und wp_posts.post_name = 'Eltern' AND wp_posts.post_type = 'post' ORDER BY wp_posts.post_date DESC
FWIW: Wenn Sie den Permalink auf diese Weise einstellen, kann der Permalink nicht bearbeitet werden. Vor:
Nach:
quelle