web-dev-qa-db-de.com

Wie bekomme ich alle Beiträge mit einem Beitragsstatus?

Ich erstelle ein Front-End-Dashboard, in dem alle Beiträge des aktuellen Benutzers angezeigt werden sollen. Daher muss ich Posts in allen Status anzeigen, hauptsächlich published, trashed und die pending. Ich verwende jetzt eine einfache Abfrage, die jedoch nur die veröffentlichten Beiträge zurückgibt.

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

Kann jemand helfen? Was muss ich sonst noch tun?

34
Sisir

Sie können den Parameter post_status verwenden:

* '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. 

Ich bin mir nicht sicher, ob es "any" akzeptiert, also benutze und ordne es mit allen Typen, die du willst:

$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

Die Klassenmethode WP_Query->query() akzeptiert ein Argument any für post_status. Siehe wp_get_associated_nav_menu_items() für einen Beweis.

Gleiches gilt für get_posts() (das ist nur ein Wrapper für den obigen Aufruf).

6
kaiser

Es gibt eine einfache Möglichkeit, wie Sie alle Posts mit einem beliebigen Status abrufen können:

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

Jetzt können Sie alle Posts durchlaufen:

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

Selbst wenn Sie any als post_status übergeben, erhalten Sie immer noch nicht den Beitrag im Ergebnis wenn alle der folgenden Bedingungen erfüllt sind:

  1. Ein einzelner Beitrag wird abgefragt. Ein Beispiel hierfür wäre das Abfragen mit name, d. H. Der Schnecke.
  2. Der Beitrag hat einen nicht öffentlichen Beitragsstatus.
  3. Der Client hat keine aktive Administrationssitzung, d. H. Sie sind derzeit nicht angemeldet.

Lösung

Abfrage explizit für jeden Status. Um beispielsweise nach Stati zu fragen, die nicht trash oder auto-draft sind (es ist ziemlich unwahrscheinlich, dass Sie diese wollen), können Sie Folgendes tun:

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