web-dev-qa-db-fra.com

WP Requête avec plusieurs catégories - passer un tableau fonctionne?

Selon le codex, pour interroger les publications pouvant appartenir à une collection de catégories, nous devons procéder de la manière suivante:

$query = new WP_Query( array( 'cat' => '2,6,17,38' ) );

https://codex.wordpress.org/Class_Reference/WP_Query#Category_Parameters

Cependant, j'ai ce qui suit, qui fonctionne, et je ne sais pas pourquoi.

  $args = array(
    'cat' => $related_cat_ids,
    'posts_per_page' => -1,
  );
  $query = new WP_Query($args);

La raison pour laquelle je suis confus est que $ related_cat_ids est en fait un tableau, mais l'exemple montre clairement une chaîne de nombres, séparés par des virgules, pour la valeur 'cat'.

Est-ce quelque chose qui devrait me préoccuper? Mon code va-t-il tout d'un coup cesser de fonctionner dans une future version de WordPress? Il est plus pratique pour mon cas de continuer à utiliser le tableau plutôt que de le formater dans cette chaîne. La raison en est que j'utilise get_the_category() pour obtenir les catégories de manière dynamique, puis que je pousse les ID de ce tableau dans mon nouveau tableau.

1
Jordan Carter

Je comprends votre confusion, mais vous n’avez pas à vous inquiéter car en coulisse, Wordpress prend toutes les mesures nécessaires pour que cela fonctionne.

Par exemple, prenez le code suivant du class-wp-query.php

// If querystring 'cat' is an array, implode it.
if ( is_array( $q['cat'] ) ) {
    $q['cat'] = implode( ',', $q['cat'] );
}

Vérifie si est un tableau et transforme rapidement le résultat en une chaîne séparée par des virgules.

Une autre façon utilisera les autres options telles que:

 category__and           An array of category IDs (AND in).
 category__in            An array of category IDs (OR in, no children).
 category__not_in        An array of category IDs (NOT in).

Plus d'informations à ce sujet dans Category_Parameters

Mais encore une fois, je préférerais utiliser la manière que vous trouvez plus confortable.

Il est tout à fait correct d’utiliser le format array() si vous le trouvez plus utile. C’est ce qui fait de Wordpress un outil amusant et utile sur lequel travailler.

2
Drupalizeme

Oui, ça va marcher. L'information peut ne pas être fournie sur le codex. Mais si vous regardez le code ici en ce qui concerne le paramètre, vous constaterez que même si un tableau est passé, il est changé en chaîne.

    // If querystring 'cat' is an array, implode it.
    if ( is_array( $q['cat'] ) ) {
        $q['cat'] = implode( ',', $q['cat'] );
    }

Alors tu devrais être en sécurité. En ce qui me concerne, c’est une bonne chose que les deux chaînes et tableaux soient acceptés comme arguments et que la communauté WordPress laisse les choses comme elles sont.

Même si vous avez encore des doutes, vous pouvez toujours utiliser le paramètre category__in qui prend toujours un tableau comme ci-dessous:

$args = array(
'category__in' => $related_cat_ids,
'posts_per_page' => -1,
);
$query = new WP_Query($args);
0
ghoul