Ich habe hier alle Fragen zu benutzerdefinierten Permalinks für Posts durchgearbeitet, aber die meisten scheinen entweder Probleme mit benutzerdefinierten Taxonomieumschreibungen oder das offensichtliche Fehlen von flush_rewrite_rules () zu sein. Aber in meinem Fall verwende ich nur einen benutzerdefinierten Beitragstyp (keine Taxonomie), der hierarchisch festgelegt ist (damit ich Eltern-Kind-Beziehungen zuweisen kann), mit der richtigen "Unterstützung" für die Attribute Metabox usw. usw. I hab über tausend verschiedene möglichkeiten rewrite regeln gespült. Ich habe verschiedene Permalink-Strukturen ausprobiert. Untergeordnete URLs führen jedoch immer zu 404!
Ich hatte ursprünglich unabhängige benutzerdefinierte Beitragstypen für die Elemente "parent" und "child" (mit p2p), und ich hätte wahrscheinlich keine Probleme gehabt, eine Taxonomie für die Gruppierung "parent" zu verwenden - ich weiß, dass diese semantisch genauer wären. Für den Kunden ist es jedoch am einfachsten, die Hierarchie zu visualisieren, wenn die "Posts" im Administrator angezeigt werden, genau wie die folgenden Seiten: Ein einfacher Baum, in dem unter dem übergeordneten Element Kinder mit dem Präfix "-" und in der richtige Reihenfolge. Es können auch verschiedene Methoden zum Zuweisen der Reihenfolge per Drag & Drop verwendet werden. Die Gruppierung über Taxonomie (oder p2p) führt zu einer flachen Liste von "Posts" in den Admin-Listen, was einfach nicht so offensichtlich ist.
Was ich also suche, ist im wahrsten Sinne des Wortes dasselbe Verhalten wie die "Kernseiten", jedoch mit meinem benutzerdefinierten Beitragstyp. Ich habe den Post-Typ wie erwartet registriert und im Admin funktioniert er einwandfrei. Ich kann jedem "Post" des Newsletters einen Parent und einen menu_order zuweisen. Diese werden in den Edit Listings korrekt angezeigt:
Spring 2012
— First Article
— Second Article
Und ihre Permalinks scheinen richtig konstruiert zu sein. Wenn ich beim Registrieren des Post-Typs etwas an der Struktur ändere oder sogar den Überschreibungs-Slug ändere, werden diese automatisch korrekt aktualisiert, sodass ich weiß, dass etwas funktioniert:
http://mysite.com/parent-page/child-page/ /* works for pages! */
http://mysite.com/post-type/parent-post/child-post/ /* should work? */
http://mysite.com/newsletter/spring-2012/ /* works! */
http://mysite.com/newsletter/spring-2012/first-article/ /* 404 */
http://mysite.com/newsletter/spring-2012/second-article/ /* 404 */
Ich habe auch Standard-Core- "Seiten" mit hierarchischen Beziehungen erstellt und sie sehen im Administrator genauso aus, aber sie funktionieren auch im Front-End (sowohl übergeordnete als auch untergeordnete URLs funktionieren einwandfrei).
Meine Permalink-Struktur lautet:
http://mysite.com/%postname%/
Ich habe es auch versucht (nur weil so viele andere Antworten darauf hindeuteten, dass es nötig war, obwohl es in meinem Fall keinen Sinn ergab):
http://mysite.com/%category%/%postname%/
Meine registrierten CPT-Argumente umfassen:
$args = array(
'public' => true,
'publicly_queryable' => true,
'show_ui' => true,
'has_archive' => 'newsletter',
'hierarchical' => true,
'query_var' => true,
'supports' => array( 'title', 'editor', 'thumbnail', 'page-attributes' ),
'rewrite' => array( 'slug' => 'newsletter', 'with_front' => false ),
Der einzige sichtbare Unterschied zwischen meinen benutzerdefinierten Post - Typ Kindern und normaler Seite Kindern, ist , dass mein CPT die Schnecke zu Beginn der Permalink - Struktur hat, dann von den Eltern / Kind - Schnecken gefolgt (wo Seiten nur mit den Eltern / Kind - Schnecken beginnen, kein "Präfix"). Warum dies die Dinge beschmutzen würde, weiß ich nicht. Viele Artikel scheinen darauf hinzuweisen, dass sich solche hierarchischen CPT-Permalinks genau so verhalten sollten - aber meine funktionieren, obwohl sie gut ausgearbeitet sind, nicht.
Was mich auch verwundert, ist, wenn ich die query_vars für diese 404-Seite untersuche - sie scheinen die richtigen Werte zu enthalten, damit WP meine untergeordneten Seiten "findet", aber etwas funktioniert nicht.
$wp_query object WP_Query {46}
public query_vars -> array (58)
'page' => integer 0
'newsletter' => string(25) "spring-2012/first-article"
'post_type' => string(10) "newsletter"
'name' => string(13) "first-article"
'error' => string(0) ""
'm' => integer 0
'p' => integer 0
'post_parent' => string(0) ""
'subpost' => string(0) ""
'subpost_id' => string(0) ""
'attachment' => string(0) ""
'attachment_id' => integer 0
'static' => string(0) ""
'pagename' => string(13) "first-article"
'page_id' => integer 0
[...]
Ich habe dies mit verschiedenen Themen versucht, darunter auch mit zwölf, nur um sicherzugehen, dass es nicht irgendeine fehlende Vorlage meinerseits ist.
Mit dem Rewrite Rules Inspector wird Folgendes für die URL angezeigt: http://meinesite.com/newsletter/spring-2012/first-article/
newsletter/(.+?)(/[0-9]+)?/?$
newsletter: spring-2012/first-article
page:
(.?.+?)(/[0-9]+)?/?$
pagename: newsletter/spring-2012/first-article
page:
wie es auf einer anderen Inspektorseite angezeigt wird:
RULE:
newsletter/(.+?)(/[0-9]+)?/?$
REWRITE:
index.php?newsletter=$matches[1]&page=$matches[2]
SOURCE:
newsletter
Diese Neuschreibungsausgabe würde mich glauben lassen, dass der folgende "nicht-hübsche" Permalink funktionieren würde:
http://meinesite.com/?newsletter=spring-2012&page=first-article
Es wird nicht 404, sondern der übergeordnete CPT-Artikel "Newsletter" angezeigt, nicht das untergeordnete. Die Anfrage sieht so aus:
Array
(
[page] => first-article
[newsletter] => spring-2012
[post_type] => newsletter
[name] => spring-2012
)
post_name
Spalte.