web-dev-qa-db-fra.com

WP_Query: Mélange catégorie__in et tag__in ensemble

Je crée une section "Articles liés" pour mon thème, basée sur un didacticiel de wpbeginner.com . Il proposait deux options pour la sélection de publications: celles de la même catégorie, utilisant category__in, ou celles portant la même étiquette, utilisant tag__in.

Est-il possible de les mettre dans un grand pot de mélange, si vous voulez, et de sélectionner les articles de chacun d'entre eux? Je ne parle pas de ceux qui ont la même catégorie (s) ET la même étiquette (s), mais ceux qui ont ou.

1
Nate

Oui c'est possible Tous Les taxonomies sont stockées dans la base de données dans la table wp_term_taxonomy. Les éléments suivants sont tous répertoriés en tant que taxonomies

  • catégorie

  • post_tag

  • catégorie_lien

  • post_format et

  • Taxonomies personnalisées

Tous les termes appartenant à ces taxonomies sont stockés dans la table wp_terms. Les balises sont des termes de la taxonomie post_tag, et toutes les "catégories" que vous créez dans l'écran de menu de publication sous "Catégories" sont en réalité des termes de la taxonomie category

Cela facilite la combinaison des différentes taxonomies et termes dans une requête. Pour ce faire, vous allez utiliser les paramètres de taxonomie dans WP_Query pour exécuter un tax_query personnalisé.

OK, nous devons d’abord obtenir une liste de toutes les catégories et de tous les tags associés à un message. Pour les catégories, vous allez utiliser get_the_category et pour les balises get_the_tags . Vous allez retourner cela comme un tableau que vous allez utiliser dans votre requête personnalisée

global $post;
//get the categories a post belongs to          
$cats = get_the_category($post->ID);

$cat_array = array();
    foreach($cats as $key1 => $cat) {
        $cat_array[$key1] = $cat->slug;
    }

//get the categories a post belongs to      
$tags = get_the_tags($post->ID);

$tag_array = array();
    foreach($tags as $key2 => $tag) {
        $tag_array[$key2] = $tag->slug;
    }

Voici vos arguments de requête personnalisés. Vous pouvez aller voir les paramètres de taxonomie dans le lien vers WP_query que j'ai fourni. Allez aussi voir tous les paramètres que vous pouvez utiliser dans WP_query car certains paramètres de ce tutoriel ont été dépréciés il y a longtemps, par exemple, comme caller_get_posts qui a été remplacé par ignore_sticky_posts

$args = array(
    'posts_per_page' => 5,
    'orderby' => 'Rand',
    'tax_query' => array(
        'relation' => 'OR',
        array(
            'taxonomy' => 'category',
            'field' => 'slug',
            'terms' => $cat_array,
            'include_children' => false 
        ),
        array(
            'taxonomy' => 'post_tag',
            'field' => 'slug',
            'terms' => $tag_array,
        )
    )
);

$the_query = new WP_Query( $args );

Vous pouvez jouer avec le code et le modifier à votre guise.

1
Pieter Goosen