web-dev-qa-db-fra.com

Ajout de types de publication personnalisés à archive.php

J'ai 3 types de messages différents dans mon blog. Lorsque je clique sur une catégorie d'une publication personnalisée, je redirige vers une page 404 car, par défaut, archive.php ne reconnaît pas les types de publication personnalisés.

J'ai trouvé cette solution (et d'autres utilisant la même approche) à plusieurs endroits:

add_filter('pre_get_posts', 'query_post_type');
function query_post_type($query) {
  if(is_category() || is_tag()) {
    $post_type = get_query_var('post_type');
    if($post_type)
        $post_type = $post_type;
    else
        $post_type = array('post','cpt'); // replace cpt to your custom post type
    $query->set('post_type',$post_type);
    return $query;
    }
}

le problème est que, dans l'encadré, j'utilise également une boucle WP_Query pour afficher les derniers messages de chaque catégorie de messages personnalisés. Cette solution fonctionne parfaitement pour la page d’archive, mais elle gâche (combine en fait tous mes types de publication) avec mon script de barre latérale.

Je cherche une solution qui n'utilise pas pré_get_posts pendant des heures et je n'ai rien trouvé. L'aide serait vraiment appréciée.

2
wunnle

À l'action pre_get_posts , vérifiez si l'objet de requête is_main_query cible uniquement la requête d'archive principale et exclut les requêtes supplémentaires.

add_action('pre_get_posts', 'query_post_type');
function query_post_type($query) {
  if($query->is_main_query()
    && ( is_category() || is_tag() )) {
        $query->set( 'post_type', array('post','cpt') );
  }
}
3
Milo