Cum să obții toate articolele cu orice status?

30 mar. 2011, 16:41:40
Vizualizări: 209K
Voturi: 62

Creez un panou de control frontend unde trebuie să afișez toate articolele utilizatorului curent. Astfel, am nevoie să afișez articolele în toate stările, în principal published, trashed și pending. Momentan folosesc o interogare simplă dar aceasta îmi returnează doar articolele publicate.

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

Mă poate ajuta cineva? Ce altceva trebuie să fac?

4
Comentarii

Ai încercat să folosești parametrul post_status, adică 'post_status' => 'any'?

t31os t31os
30 mar. 2011 16:50:57

Recomand cu tărie să folosești WP_Query, pre_get_posts sau get_posts în loc de query_posts. Niciodată să nu folosești query_posts.

Tom J Nowell Tom J Nowell
16 apr. 2013 15:45:53

@TomJNowell: asta a fost acum mult timp :) Acum folosesc cel mai des WP_Query..

Sisir Sisir
17 apr. 2013 20:22:07

@Sisir fii atent, folosește WP_Query pentru front-end și get_posts pentru interogările din admin deoarece există o problemă cu wp_reset_postdata (vezi nota și ticket-ul despre această problemă).

Aurovrata Aurovrata
30 ian. 2017 10:10:19
Toate răspunsurile la întrebare 6
7
111

Puteți utiliza parametrul post_status:

* 'publish' - un articol sau pagină publicată
* 'pending' - articol în așteptarea moderării
* 'draft' - articol în stadiu de ciornă
* 'auto-draft' - articol nou creat, fără conținut
* 'future' - articol programat pentru publicare în viitor
* 'private' - vizibil doar pentru utilizatorii autentificați
* 'inherit' - o revizie. vezi get_children.
* 'trash' - articol în coșul de gunoi. adăugat începând cu Versiunea 2.9.

Nu sunt sigur că acceptă 'any', așa că folosiți un array cu toate statusurile dorite:

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

while ( $query->have_posts() ) : $query->the_post();
30 mar. 2011 17:20:50
Comentarii

De asemenea, poți folosi get_post_stati() pentru a obține toate statusurile, inclusiv cele personalizate.

fuxia fuxia
31 ian. 2013 13:52:04

O oportunitate ratată de a elimina un apel query_posts...

Tom J Nowell Tom J Nowell
16 apr. 2013 15:45:09

păcat că nu putem face ceva de genul 'post_status' => array( '!inherit' ); (pentru a indica orice post_status în afară de inherit)

aequalsb aequalsb
3 ian. 2017 03:17:26

@aequalsb ce zici de 'post_status' => array_diff(get_post_stati(), ['inherit']);

Cheslab Cheslab
29 oct. 2018 15:05:59

off-topic. 'any' este de fapt o opțiune reală. Documentație: https://developer.wordpress.org/reference/classes/wp_query/#post-type-parameters

kirillrocks kirillrocks
20 ian. 2020 16:26:58

Acesta este răspunsul greșit. any este răspunsul corect la întrebarea Cum să obții toate articolele cu orice status de postare?

User User
23 mai 2022 11:19:54

@user75665, afirmația ta este incorectă. 'post_status'=>'any' nu va recupera postările șterse.

brett brett
17 apr. 2024 16:37:44
Arată celelalte 2 comentarii
4
24

Există o metodă simplă de a obține toate articolele, indiferent de statusul lor:

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

Acum poți parcurge toate articolele:

foreach ($articles as $article) { 
 echo $article->ID . PHP_EOL; //...
}
31 ian. 2013 11:55:21
Comentarii

Variabilele $posts și $post intră în conflict cu numele de variabile proprii ale WordPress. Dacă folosești acest cod pentru a afișa ceva în alt div decât cel principal (conținutul principal), acesta va suprascrie ceea ce ar fi trebuit afișat în zona principală. Dacă intenția ta este într-adevăr să înlocuiești complet rezultatele originale ale interogării, atunci asta e ceea ce vrei, desigur. Dar totuși, este o idee bună să redenumești variabilele $posts și $post.

Henrik Erlandsson Henrik Erlandsson
3 feb. 2014 09:54:50

@Henrik nu intenționez să diminuez comentariul tău deloc (logica ta este solidă și sigură), dar consider că utilizarea variabilelor $post/$posts este perfect acceptabilă în interiorul unei funcții fără acces la variabilele globale $post/$posts - deoarece mă ajută să mențin logica în timpul dezvoltării.

aequalsb aequalsb
3 ian. 2017 03:14:57

ei bine.. aproape - doar încearcă soluția ta versus răspunsul lui @bainternet, probabil vei obține un număr diferit. nu include stările auto-draft (schiță automată) și trashed (șters).

Sagive Sagive
12 mai 2022 13:16:26

Acesta este răspunsul corect la întrebarea Cum să obții toate articolele cu orice statut de postare?. any vă va returna orice tip de statut de postare.

User User
23 mai 2022 11:20:24
0

În majoritatea cazurilor, poți folosi get_posts() cu parametrul 'any' pentru asta:

$posts = get_posts(
 array(
  'numberposts' => -1,
  'post_status' => 'any',
  'post_type' => 'my-post-type',
 )
);

Dar în acest fel nu vei obține postările cu statusurile trash și auto-draft. Trebuie să le specifici explicit, astfel:

$posts = get_posts(
 array(
  'numberposts' => -1,
  'post_status' => 'any, trash, auto-draft',
  'post_type' => 'my-post-type',
 )
);

Sau poți folosi funcția get_post_stati() pentru a specifica toate statusurile existente explicit:

$posts = get_posts(
 array(
  'numberposts' => -1,
  'post_status' => get_post_stati(),
  'post_type' => 'my-post-type',
 )
);
28 aug. 2019 21:32:09
5

Metoda clasei WP_Query ->query() acceptă un argument any pentru post_status. Consultați wp_get_associated_nav_menu_items() pentru o dovadă.

Același lucru este valabil și pentru get_posts() (care este doar un wrapper pentru apelul menționat mai sus).

5 oct. 2012 14:02:06
Comentarii

Din documentația WP_Query: 'any' - preia orice status, cu excepția celor din tipurile de postări care au 'exclude_from_search' setat pe true. (Există o greșeală de tipar acolo, ei se referă de fapt la statusurile postărilor în loc de tipurile de postări.) Aceasta înseamnă că statusurile auto-draft și trash sunt excluse.

Tamlyn Tamlyn
15 apr. 2013 15:50:16

@Tamlyn Din câte știu eu, aceasta nu este o greșeală de tipar. Acesta preia orice status din tipurile de postări care sunt disponibile public. Statusurile sunt doar termeni. Ele nu au o proprietate publică sau privată în sine. Ai putea dezactiva o taxonomie prin dezactivarea query_var... din orice motiv ai face asta. Notă laterală: Pluralul pentru post status este....

kaiser kaiser
15 apr. 2013 17:30:34

Dacă urmărești codul (adesea mai ușor decât să citești documentația, cred) poți vedea că WP_Query#get_posts() apelează get_post_stati() care filtrează $wp_post_statuses pentru valori unde exclude_from_search este true, apoi exclude postările cu aceste statusuri din interogare. Există un proces similar pentru tipurile de postări când post_type este setat pe 'any'.

Tamlyn Tamlyn
16 apr. 2013 14:15:03

@Tamlyn După ce am verificat conținutul proprietății $wp_post_statuses, trebuie să recunosc că ai dreptate :)

kaiser kaiser
16 apr. 2013 15:07:27

nu funcționează pentru statutul de gunoi.

Maxwell s.c Maxwell s.c
10 dec. 2018 22:56:29
0

Chiar dacă treci any ca post_status, tot nu vei obține postarea în rezultat dacă toate următoarele condiții sunt adevărate:

  1. Se interoghează o singură postare. Un exemplu ar fi interogarea după name, adică slug-ul.
  2. Postarea are un status care nu este public.
  3. Clientul nu are o sesiune de administrare activă, adică nu ești autentificat în prezent.

Soluție

Interoghează explicit pentru fiecare status. De exemplu, pentru a interoga statuturile care nu sunt trash sau auto-draft (este puțin probabil să dorești acestea), ai putea face ceva de genul:

$q = new WP_Query([
    /* ... */
    'post_status' => array_values(get_post_stati(['exclude_from_search' => false])),
]);
28 mar. 2019 02:04:21
1

Încă nu pot comenta: $args['post_status']='any'; funcționează pentru 'publish' și 'draft', dar nu și pentru 'trash', așa că am avut nevoie de $args['post_status']=array('any','trash');

23 aug. 2021 00:35:56
Comentarii

Bine ați venit la WPSE! :)

Sisir Sisir
23 aug. 2021 15:04:07