web-dev-qa-db-fra.com

get_posts () renvoie tous les articles plutôt que ceux spécifiés avec 'post_author' =>

Je souhaite récupérer un tableau contenant les publications d'un certain utilisateur pour une catégorie de type de publication personnalisée.

Cependant, get_posts ($ arg) retourne TOUTES les publications de ce type de publication personnalisée, bien que j’aie spécifié le post_author.

<?php $pages = get_posts(array('post_type'  => 'profile','post_author' => $post->post_author)); ?>

<?php var_dump ($pages); ?>

Dans cet exemple, $ post-> post_author vaut 11. Cependant, le résultat du code ci-dessus est le suivant:

array(3) { 
[0]=> object(WP_Post)#343 (24) { 
["ID"]=> int(2326)
["post_author"]=> string(2) "11" 
..etc.} 
[1]=> object(WP_Post)#352 (24) { 
["ID"]=> int(2324) 
["post_author"]=> string(1) "0" 
 ...etc.}
[2]=> object(WP_Post)#395 (24) { 
["ID"]=> int(2322)
["post_author"]=> string(1) "0" 
...etc.} 

Pourquoi get_posts () renvoie-t-il les publications des auteurs dont l'ID est et non 11?

1
SPi

post_author n'est pas un paramètre valide pour get_posts. Vous devez vraiment consulter la liste d'arguments de WP_Query pour voir que, car get_posts() est vraiment juste un wrapper autour de cette classe .

  • auteur (int) - utilisez l'auteur id.
  • nom de l'auteur (chaîne) - utilisez 'user_nicename' (NOT name).
  • auteur__in (tableau) - utilisez l'auteur id (disponible avec Version 3.7 ).
  • auteur__not_in (tableau) - utilisez l'auteur id (disponible avec Version 3.7 ).

http://codex.wordpress.org/Class_Reference/WP_Query#Author_Parameters

Ce que vous voulez, c'est author sans la partie post_. Essayez cela et ça devrait marcher.

5
s_ha_dum

Comme il est tout à fait difficile de savoir d'où provient $post->post_author, le problème le plus probable est que vous ne faites pas référence à l'instance $GLOBALS['post'] de WP_Post ou que vous avez une autre requête après votre boucle principale qui remplace la requête principale.

Votre meilleure chance sera probablement d’utiliser wp_reset_query() . Cela réalignera l'objet $GLOBALS['wp_query'] qui contient à nouveau la requête actuelle avec $GLOBALS['wp_the_query'], qui contient la requête principale et , puis appelle wp_reset_postdata() pour revenir en arrière dans la requête principale.

Si cela ne résout pas le problème, certains plug-ins (ou vous-même) ou le thème ont utilisé query_posts(), ce qui écrase l'objet global $wp_the_query et gâche donc votre boucle.

0
kaiser