web-dev-qa-db-fra.com

Des arguments WP_Query pour récupérer des publications de type publication personnalisées appartenant à certaines catégories?

J'ai joué pendant des heures, mais je ne parviens toujours pas à comprendre les bons arguments pour un WP_Query secondaire, qui doit récupérer tous les messages de my_custom_post_type qui sont dans la catégorie interrogée.

Scenario est un fichier de modèle category.php personnalisé (écriture d'un thème personnalisé) permettant de restituer une archive de catégorie pour les publications de type publication personnalisée. Par conséquent, la requête principale est par nom de catégorie/slug extrait de l’URL (par exemple,/category/cat-name). Par défaut, la requête principale ne récupère pas les publications de type publication personnalisées. Veuillez noter que j'utilise la taxonomie de catégorie par défaut avec mon type d'article personnalisé.

Donc, je cherche quelque chose comme

$args = array(
  'post_type' => 'my_custom_post_type',
  'category_id'  => $current_category_id
);

Cependant, comment obtenir $ current_category_id à partir de la requête principale? Ou, comment le faire de la bonne façon?

1
Bunjip

Si vous souhaitez que votre requête principale prenne en compte votre type de publication personnalisé, procédez comme suit:

function add_custom_post_type_to_query( $query ) {
    if ( $query->is_archive() && $query->is_main_query() ) {
        $query->set( 'post_type', array('post', 'my_custom_post_type') );
    }
}
add_action( 'pre_get_posts', 'add_custom_post_type_to_query' );

Vous pouvez placer le code ci-dessus dans le functions.php de votre thème ou dans un plugin.

Pour obtenir l'id du terme de taxonomie actuel (ici, la taxonomie est la taxonomie "catégorie" par défaut), vous pouvez utiliser la ligne de code suivante:

get_queried_object()->term_id;

(extrait de ici )

Étant donné que vous parlez de type de publication personnalisé, vous utiliserez probablement également la taxonomie personnalisée un jour également. Pour inclure correctement certains filtres de taxonomie dans un WP_Query, vous pouvez vous référer à ce lien

Voici un exemple de WP_Query avec la taxonomie de la catégorie:

$args = array(
    'post_type' => 'my_custom_post_type', // or multiples : array('my_custom_post_type','post')
    'tax_query' = array(
        array(
            'taxonomy' => 'category',
            'field'    => 'term_id',
            'terms'    => get_queried_object()->term_id,
        )
    )
);

Mais vous ne voudrez probablement jamais faire une WP_Query avec une tax_query sur votre terme de taxonomie actuel car elle le fait automatiquement (après avoir ajouté le type de publication personnalisé dans les types de publication de la requête principale)

3
Sladix