web-dev-qa-db-fra.com

Comment modifier une requête d'archive avec pre_get_posts pour ajouter des CPT?

Si j'utilise pre_get_posts de cette façon

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');

il semble que wordpress ne charge pas archive-company.php mais archive.php.

Comment utiliser pre_get_posts pour ajouter des CPT supplémentaires à une page d'archive?

EDIT 1

J'ai mentionné archive-company.php parce que je veux charger les CPT supplémentaires à l'adresse URL www.website.com/company.

EDIT 2

Je suis ouvert à toute solution qui extrait un modèle spécifique basé sur l'URL www.website.com/company et permet l'ajout de CPT supplémentaires (de préférence via pre_get_posts, en termes de performances).

EDIT 3

Essayer de rendre les choses plus claires ici!

Je souhaite pouvoir charger plusieurs CPT sur l'URL www.website.com/company.

  1. Quel modèle dois-je/puis-je utiliser?
  2. Comment ajouter les CPT à la requête principale (éventuellement via pre_get_posts, en termes de performances)?

J'essaie d'éviter l'utilisation de new WP_Query() et d'avoir plusieurs boucles dans la page.

1
Diogo Bento

Vous semblez supposer qu'il récupérerait l'archive pour en premier de plusieurs types de publication. Mais pourquoi? L'ordre dans ce cas n'indique aucune sorte de priorité.

WP semble aussi considérer cela comme logique. Si vous examinez get_archive_template(), le modèle individuel ne sera pris en compte que s'il y a un seul type dans la requête.

Plusieurs types de publication dans la requête entraîneront le chargement de archive.php, comme vous le constatez.

Si vous souhaitez charger un modèle plus spécifique, vous devez également le remplacer par des filtres, par exemple avec archive_template one (un dynamique dans get_query_template()).

1
Rarst