web-dev-qa-db-fra.com

Comment obtenir tous les messages avec n'importe quel statut?

Je crée un tableau de bord frontal où je dois afficher tous les messages de l'utilisateur actuel. Je dois donc afficher les messages dans tous les États, principalement published, trashed et le pending. J'utilise maintenant une requête simple mais elle ne renvoie que les publications publiées.

$query = array(
    'post_type' => 'my-post-type',
    'post_author' => $current_user->ID              
    );
    query_posts($query);

Quelqu'un peut-il aider? Que dois-je faire d'autre?

34
Sisir

Vous pouvez utiliser le paramètre post_status:

* 'publish' - a published post or page
* 'pending' - post is pending review
* 'draft' - a post in draft status
* 'auto-draft' - a newly created post, with no content
* 'future' - a post to publish in the future
* 'private' - not visible to users who are not logged in
* 'inherit' - a revision. see get_children.
* 'trash' - post is in trashbin. added with Version 2.9. 

Je ne suis pas sûr qu'il accepte 'any', utilisez donc array avec tous les types souhaités:

$query = array(
    'post_type' => 'my-post-type',
    'post_author' => $current_user->ID,
    'post_status' => array('publish', 'pending', 'draft', 'auto-draft', 'future', 'private', 'inherit', 'trash')    
);
$loop = new WP_Query($query);

while ( $loop->have_posts() ) : $loop->the_post();
59
Bainternet

La méthode de classe WP_Query->query() accepte un argument any pour post_status. Voir wp_get_associated_nav_menu_items() pour une preuve.

La même chose vaut pour get_posts() (qui est juste un wrapper pour l'appel ci-dessus).

6
kaiser

Il existe un moyen simple, comment obtenir tous les messages avec n'importe quel statut:

$articles = get_posts(
 array(
  'numberposts' => -1,
  'post_status' => 'any',
  'post_type' => get_post_types('', 'names'),
 )
);

Maintenant, vous pouvez parcourir tous les messages:

foreach ($articles as $article) { 
 echo $article->ID . PHP_EOL; //...
}
6
OzzyCzech

Même si vous transmettez any en tant que post_status, vous ne recevrez toujours pas la publication dans le résultat si toutes les conditions suivantes sont remplies:

  1. Un seul post est interrogé. Un exemple de ceci serait interroger par name, c’est-à-dire le slug.
  2. La publication a un statut qui n'est pas public.
  3. Le client n’a pas de session d’administrateur active, c’est-à-dire que vous n’êtes pas connecté.

Solution

Interrogez explicitement pour chaque statut. Par exemple, pour rechercher des statistiques qui ne sont pas trash ou auto-draft (il est peu probable que vous souhaitiez celles-ci), vous pouvez faire quelque chose comme ceci:

$q = new WP_Query([
    /* ... */
    'post_status' => get_post_stati(['exclude_from_search' => false]),
]);
0
XedinUnknown