wake-up-neo.com

Wie ändere ich eine Archivabfrage mit pre_get_posts, um CPTs anzufügen?

Wenn ich pre_get_posts so benutze

function ef_company_query($query) {
  if ( !is_admin() && $query->is_main_query() && $query->is_post_type_archive( 'company' ) ) {
    $query->set('post_type', array( 'company', 'mission', 'values', 'staff' ) );
  }
}

add_action('pre_get_posts','ef_company_query');

es scheint, dass WordPress die Datei archive-company.php nicht lädt, sondern die Datei archive.php.

Wie soll ich pre_get_posts verwenden, um zusätzliche CPTs an eine Archivseite anzuhängen?

EDIT 1

Ich habe archive-company.php erwähnt, weil ich die zusätzlichen CPTs unter der URL www.website.com/company laden möchte.

EDIT 2

Ich bin offen für jede Lösung, die eine bestimmte Vorlage basierend auf der URL www.website.com/company abruft und die Hinzufügung zusätzlicher CPTs zulässt (vorzugsweise per pre_get_posts, in Bezug auf die Leistung).

EDIT 3

Ich versuche hier die Dinge klarer zu machen!

Ich möchte in der Lage sein, mehrere CPTs unter der URL www.website.com/company zu laden.

  1. Welche Vorlage soll/kann ich verwenden?
  2. Wie hängen Sie die CPTs an die Hauptabfrage an (hoffentlich per pre_get_posts, in Bezug auf die Leistung)?

Ich versuche, die Verwendung von new WP_Query() zu vermeiden und mehrere Schleifen auf der Seite zu haben.

1
Diogo Bento

Sie scheinen anzunehmen, dass es Archiv für first von mehreren Beitragstypen greifen würde. Aber warum? Die Bestellung gibt in diesem Fall keine Priorität an.

WP scheint dies ebenfalls als logisch zu betrachten. Wenn Sie sich get_archive_template() ansehen, wird die einzelne Vorlage nur berücksichtigt, wenn nur ein post-Typ in der Abfrage vorhanden ist.

Mehrere Post-Typen in der Abfrage bewirken, dass archive.php geladen wird, wie Sie beobachten.

Wenn Sie eine spezifischere Vorlage laden möchten, müssen Sie diese auch über Filter überschreiben, beispielsweise mit archive_template one (dynamic one in get_query_template()).

1
Rarst