it-swarm.com.de

Die benutzerdefinierte Archiv-URL für den Beitragstyp übernimmt die Seiten-URL

Ich habe Probleme mit den Archiven für einen benutzerdefinierten Beitragstyp.

  • Ich habe eine WordPress-Seite bei /address/
  • Ich habe dynamische benutzerdefinierte Posts erstellt, die unter /address/post#/ angezeigt werden sollen.

Wenn ich diese Funktion aktiviere, wird die WordPress-Seite unter /address/ durch das Archiv für benutzerdefinierte Beiträge ersetzt.

Wie kann ich das verhindern? Ich möchte, dass die WordPress-Seite anstelle des Archivs unter /address/ angezeigt wird.

2
Cyrus

Wenn Sie Ihren Beitragstyp registrieren, setzen Sie das Argument has_archive auf false. Wenn Sie es ändern, vergessen Sie nicht, Ihre Umschreiberegeln zu löschen, um die Änderung zu sehen.

Dies funktioniert nun einwandfrei, wenn Sie, wie Sie gefragt haben, die Seite und nicht das Archiv anzeigen möchten. Was ist mit der Situation, in der Sie den Inhalt der Seite und auch die Liste der benutzerdefinierten Beiträge anzeigen möchten?

Es gibt zwei Ansätze, mit denen Sie dies erreichen können.

1 - Verwenden Sie eine Seitenvorlage

Dies ist die, die ich im Internet am häufigsten sehe. Erstellen Sie eine Seitenvorlage und verwenden Sie nach dem Anzeigen von Titel und Inhalt eine benutzerdefinierte Schleife, um Ihre Beiträge anzuzeigen. Es macht den Job, aber die Leute scheinen ziemlich oft mit der richtigen Paginierung durcheinander zu kommen.

2 - Seite für benutzerdefinierte Beiträge

Dies ist mein bevorzugter Ansatz. Ich behalte has_archive, wenn ich meinen Beitragstyp registriere und eine normale Seite zur Verwendung mit der Archivvorlage erstelle. Der Slug der Seite stimmt mit dem Slug des Archivs überein. Standardmäßig sind die Umschreiberegeln von WP so angeordnet, dass das Archiv die Seite übertrifft.

Am Anfang meiner archive-{post_type}.php-Vorlage platziere ich Folgendes:

$queried_object = get_queried_object();

$page_data = get_page_by_path( $queried_object->rewrite['slug'] );

/* no need to check our context, as we know that this 
   code will only run for our CPT archives
*/

if ( !is_single() ) {
    echo apply_filters('the_content', $page_data->post_content);
}

// process the content in the same way that the_content would within a loop

// Now go into your usual archive loop...

Wenn Sie es vorziehen, können Sie eine Seiten-ID verwenden oder sogar eine Option für Ihren Beitragstyp einrichten, die der integrierten Seite für Beiträge entspricht.

Auf diese Weise müssen Sie die schwierigere Archivabfrage nicht selbst rekonstruieren.

4

Vielen Dank für Ihre Hilfe.

Andy hat mich auf den richtigen Weg gebracht. Ich musste nur hinzufügen:

flush_rewrite_rules ();

Danke noch einmal!

0
Cyrus