J'ai lu un nombre de questions sur SE, mais je ne peux toujours pas comprendre la différence exacte par rapport à l'utilisation. Serait-il vrai de dire que j'utiliserais probablement WP_Query pour la majorité des boucles secondaires et n'utiliserais que get_posts si j'ai besoin des résultats retournés dans un tableau, ou le reformuler autrement est la principale différence entre les deux retour tableau/objet , ou y a-t-il un autre facteur majeur dont je devrais être au courant?
Vous pouvez afficher get_posts()
comme un WP_Query
réduit. En fait, en regardant la source :
//... prepares query array $r
$get_posts = new WP_Query;
return $get_posts->query($r);
get_posts()
utilise WP_Query
, mais ne renvoie qu'un tableau de publications - rien de plus. En outre, il définit:
$r['no_found_rows'] = true;
Normalement (par défaut avec l'objet WP_Query
) - WordPress demande combien de messages il y a au total - même si vous ne le faites qu'après le premier 10. Il le fait pour pouvoir effectuer la pagination. Donc, get_posts()
est en fait (légèrement) plus rapide (il ignore également les posts collants).
Si vous avez seulement besoin d’un tableau d’articles, et que besoin de l’objet de requête -use get_posts()
. Sinon, si vous avez besoin de l'accès aux méthodes d'objet de requête, à la pagination ou aux publications persistantes en haut, vous devez utiliser WP_Query
.
Une chose importante à noter est que get_posts()
a un tas d’arguments par défaut que new WP_Query()
n’a pas, qui incluent post_type
et post_status
. Les valeurs par défaut de la fonction sont configurées pour faciliter l'obtention des publications. Si vous voulez quelque chose de différent, vous devrez indiquer explicitement ces paramètres, alors qu'avec WP_Query()
, vous n'auriez pas à le faire.
Par exemple, si vous souhaitez obtenir toutes les publications, quel que soit leur statut, vous devez appeler: get_posts( array( "post_type" => 'any' ) );
(laissant "post_type" vide - ou tout ce que empty()
donnerait comme valeur true
obligera get_posts()
à appliquer sa valeur par défaut de "publish" ").