Non riesco a ottenere le bozze con WP_Query usando il parametro post_status
Non riesco a far visualizzare le bozze con WP_Query, anche quando post_status è impostato su 'any' o 'draft'
$args = array(
'p' => 1234,
'post_type' => 'any',
'post_status' => 'any'
);
$query = new WP_Query( $args );
while ( $query->have_posts() ) : $query->the_post();
// visualizza il post
endwhile;
wp_reset_postdata();
Se torno indietro e pubblico il post 1234, WP_Query lo recupera senza problemi. Ma quando è una bozza, né any
né draft
lo recuperano.
Ho letto che il parametro exclude_from_search
in register_post_type()
impedisce ai post di essere visualizzati con WP_Query, quindi l'ho impostato su false nel post_type da cui sto recuperando, in questo modo:
$args = array(
'labels' => $labels,
'description' => '',
'public' => true,
'publicly_queryable' => true,
'exclude_from_search' => false,
'show_ui' => true,
'menu_position' => 60,
'menu_icon' => null,
'capability_type' => post,
'hierarchical' => false,
'supports' => array('title', 'editor', 'author', 'excerpt', 'trackbacks', 'custom-fields', 'revisions'),
'rewrite' => true,
'query_var' => true,
'can_export' => true,
'show_in_nav_menus' => true,
);
register_post_type('chart', $args);
C'è qualcosa che sto tralasciando? Non capisco perché una bozza in questo post_type non dovrebbe essere visualizzata nella query sopra.

Prova a passarlo come un array.
Ad esempio
$args = array(
'p' => 1234,
'post_type' => 'any',
'post_status' => array('draft')
);
Oppure per tutti i tipi
$args = array(
'p' => 1234,
'post_type' => 'any',
'post_status' => array('publish', 'pending', 'draft', 'auto-draft', 'future', 'private', 'inherit', 'trash')
);

Sfortunatamente non ha funzionato. Secondo il codex e trac, post_status dovrebbe accettare una stringa, un array o una stringa separata da virgole allo stesso modo.

Posso confermare che ha funzionato per me, quando ho avuto bisogno di ottenere post in attesa e bozze. Grazie

Mi sono appena imbattuto in questo scenario esatto. Secondo me dovrebbe funzionare, ma quando ho provato una combinazione di 'p' => 123
e 'post_status' => 'any'
, non restituiva il post se lo stato era bozza.
Ho trovato una soluzione alternativa usando 'post__in' => array( 123 )
invece. Quindi:
$args = array(
'post__in' => array( 123 ),
'post_type' => 'any',
'post_status' => 'any',
);
$query = new WP_Query( $args );
// ... etc.

Dovrei quindi anche cambiare $query in $posts in $query->have_posts()
e $query->the_post()
?

Sì, anche se potresti chiamare il mio $query
come $my_query
e il mio $posts
come $query
e non farebbe molta differenza. Fondamentalmente il problema che sto cercando di evitare è il fallimento della query nel processarsi... a proposito, dove hai messo quel print_r()
che hai fatto?

L'ho messo dopo WP_Query e prima del loop, così: $query = new WP_Query( $args ); print_r($query); while ( $query->have_posts() ) : $query->the_post();
.
