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.
$uri = get_post( $parent )->post_name . "/" . $uri;
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:
function wpse_182006_pages_permalink( $link, $post_id) {
// get the post_type and evaluate
$posttype = get_post_field( 'post_type', $post_id, 'display' );
if ($posttype !== 'page'){
return link;
}
// build the uri from the slug
$slugname = get_post_field( 'post_name', $post_id, 'display' );
$slugname = $slugname."/";
$link = home_url($slugname);
return $link;
}
add_filter( 'page_link', 'wpse_182006_pages_permalink', 10, 3 );
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: