it-swarm.com.de

Benutzerdefinierter Beitragstyp Permalink für Eltern/Kind, Fehler 404-Seite nicht gefunden

Hier haben wir einen Ausschnitt aus einer functions.php-Datei ...

add_action('init', 'create_recipes');
function create_recipes() {
   $recipes_args = array(
       ...some properies...,
       'hierarchical' => false,
       'rewrite' => array('slug' => 'recipes')
       ...maybe more properties...
   }
   register_post_type('recipes',$recipes_args);
}

add_action( 'init', 'recipes_rewrites_init' );
function recipes_rewrites_init(){
    global $wp_rewrite;
    $gallery_structure = 'recipes/%post_id%/%recipe%';
    $wp_rewrite->add_rewrite_tag("%recipe%", '([^/]+)', "recipe=");
    $wp_rewrite->add_permastruct('recipe', $gallery_structure, false);
}

Dies registriert einen benutzerdefinierten Beitragstyp "Rezepte" und richtet die Permalink-Struktur so ein, dass wir zum Beispiel Folgendes erreichen können:

(1) example.com/recipes/394/lunch/

Auf der Seite "Mittagessen" werde ich die Tugenden eines guten Mittagessens hervorheben. So weit, ist es gut.

Was ist jedoch, wenn ich "Mittagessen" in "Sandwich", "Burger", "Salat" unterteilen möchte (z. B. auf der Seite "Sandwich" werde ich über das Mittagessen sprechen - speziell Sandwiches). Zuerst erstelle ich diese zusätzlichen Seiten im Abschnitt "Rezept" für den benutzerdefinierten Beitragstyp und wähle die Seite "Mittagessen" als übergeordnetes Element aus. Jetzt könnte ich hoffen/vermuten dass zum Beispiel Folgendes funktioniert:

(2) example.com/recipes/513/lunch/sandwich/

Oh je, das funktioniert nicht als vermutet - wir erhalten einen 404 Fehler. Ok, wie kommen wir zur 'Sandwich'-Seite? Mal schauen...

(3) example.com/recipes/513/sandwich/

Großartig, das funktioniert - aber ich wollte, dass der übergeordnete Slug ('lunch') der Seite 'sandwich' in der URL vorangestellt wird ( siehe (2) ). Wie kann man das lösen? Fangen wir irgendwo an ...

Schritt 1

Was ich weiß ist, dass, wenn ich 'hierarchical' => false in 'hierarchical' => true ändere, die the_permalink() -Funktion (wie gewünscht) den Permalink wie in (2) erstellt. Großartig, aber dies führt zu einem 404-Fehler mit (2) . Ich vermute, ich habe entweder einen Fehler in der Funktion create_recipes gemacht, oder ich habe in der Funktion recipes_rewrites_init nicht genug getan.

Schritt 2

Ich nehme an, ich könnte mich (theoretisch) in die Permalink-Funktion WP einhängen, um die Anfrage/den Permalink abzufangen, den übergeordneten Slug des Posts abzurufen (falls vorhanden) und ihn kurz vor dem Slug des Posts abzulegen. Dies ändert jedoch vermutlich nur den resultierenden Permalink, den ich bereits in Schritt 1 ausgeführt habe. Was ich wirklich brauche, ist sicherzustellen, dass die Anforderung korrekt weitergeleitet wird.

Fragen

Wie mache ich das? Gibt es einen bekannten WP Weg (d. H. Vorhandene Funktionen/Optionen im anfänglichen benutzerdefinierten Typ-Setup)?

Andere Gedanken

Mir ist auch bewusst, dass benutzerdefinierte Taxonomien (zumindest teilweise) verwendet werden können, um das Problem der Kategorisierung von Posts zu lösen - und dass es ein oder mehrere Plugins gibt, die helfen. Ich möchte mich jedoch, wenn möglich, zunächst an benutzerdefinierte Beitragstypen halten.

Vielen Dank.


Update 1

Ich kenne jetzt ein Plugin namens "Posts 2 Posts", das unter anderem Verbindungen zwischen benutzerdefinierten Beitragstypen ermöglicht - insbesondere zwischen verschiedenen benutzerdefinierten Beitragstypen. In meinem Beispiel verwende ich jedoch nur einen benutzerdefinierten Beitragstyp und versuche, eine natürliche Parent-Child-Hierarchie zu haben (was wie ein ziemlich normales WP Ding aussieht), anstatt eine Beziehung zwischen unterschiedlichen benutzerdefinierten Beitragstypen zu erzwingen.


Update 2

Einige weitere Informationen und eine Art Lösung. Hier sind zwei wichtige Dinge:

  1. Das Hinzufügen von benutzerdefinierten Permalink-Strukturen zu benutzerdefinierten Beitragstypen kann schwierig sein .
  2. Das Hinzufügen von benutzerdefinierten Permalink-Strukturen zu benutzerdefinierten Beitragstypen ist möglicherweise nicht erforderlich .

Mir wurde klar, dass ich gegen die hervorragende Standard-Permalink-Funktionalität von Wordpress kämpfte, indem ich eine [unnötige] benutzerdefinierte Permalink-Struktur (z. B. example.com/recipes/513/lunch/sandwich/) erstellte, die im Nachhinein verschlungen ist. Ich war der Meinung, dass die Beitrags-ID aus Leistungsgründen in der URL vorhanden sein sollte (im Gegensatz zu nur Slugs, die möglicherweise langsamer übereinstimmen, wenn WP). Ich stellte mir vor, dass dies möglich sein könnte, aber die Mühe nicht wert sein könnte. Stattdessen habe ich meine benutzerdefinierten Permalink-Inhalte herausgerissen und WP zum Beispiel example.com/recipes/lunch/sandwich/ auflösen lassen - was jetzt genau wie erwartet funktioniert. Denken Sie daran, 'hierarchical' => true einzustellen, und die Welt ist Ihr Permalink.

Fazit

Wenn Sie darauf bestehen, das zu tun, was ich versucht habe, muss möglicherweise eine benutzerdefinierte Permalink-Struktur eingerichtet werden, um die 404-Fehler zu vermeiden (mein ursprüngliches Problem). Im Moment bleibe ich bei der standardmäßigen hierarchischen Permalink-Funktionalität WP.

4
41st

Als Antwort auf meine eigene Frage:

Es stellt sich heraus, dass die Wordpress-Permalink-Struktur für benutzerdefinierte Typen, z. example.com/recipes/lunch/sandwich/. Dies funktioniert genauso wie erwartet, wenn Sie 'hierarchisch' => wahr setzen.

Was ich ursprünglich versucht habe, war unnötig schwierig auszuführen und erfordert die ordnungsgemäße Einrichtung einer benutzerdefinierten Permalink-Struktur, um 404-Fehler zu vermeiden. Ich rate Ihnen, sich an die standardmäßige hierarchische Permalink-Funktionalität von Wordpress zu halten.

0
41st