web-dev-qa-db-fra.com

WP_query category__in ne fonctionne pas, ne sort que de la première catégorie

J'ai écrit un WP_query et le comportement est bizarre. J'ai essayé presque tout mais ça ne marche pas. J'ai trouvé une solution mais j'essaie de comprendre.

Les requêtes suivantes renvoient toujours les messages de la première carrière (id: 15, slug: slug1).

$args = array(
    'post_type' => 'post',
    'post_status' => 'publish',
    'category__in'    => array(15, 17),
    'posts_per_page' => 4
);

$query = new WP_Query($args);
$items = $query->get_posts();

OR

$args = array(
    'post_type' => 'post',
    'post_status' => 'publish',
    'cat'    => '15,17',
    'posts_per_page' => 4,
);

$query = new WP_Query($args);
$items = $query->get_posts();

OR

$args = array(
    'post_type' => 'post',
    'post_status' => 'publish',
    'category_name'    => 'slug1,slug2',
    'posts_per_page' => 4,
);

$query = new WP_Query($args);
$items = $query->get_posts();

OR

$args = array(
    'post_type' => 'post',
    'post_status' => 'publish',
    'posts_per_page' => 4,
    'tax_query' => array(
        array(
            'taxonomy' => 'category',
            'field'    => 'term_id',
            'terms'    => array(15,17),
        ),
    ),
);

$query = new WP_Query($args);
$items = $query->get_posts();

La solution était d'utiliser query_post ($ args) au lieu de WP_query-> get_posts ()

$args = array(
    'post_type' => 'post',
    'post_status' => 'publish',
    'category__in'    => array(15, 17),
    'posts_per_page' => 4
);

$items = get_posts($args);

Pouvez-vous me dire où je me trompe?

1
Ludovic M.

Après la réponse de Milo , j’ai trouvé une autre solution de contournement qui fonctionne et qui me convient mieux.

$args = array(
    'post_type' => 'post',
    'post_status' => 'publish',
    'category__in'    => array(15, 17),
    'posts_per_page' => 4
);

$query = new WP_Query();
$items = $query->query($args);
1
Ludovic M.