Nu pot obține drafturile cu WP_Query folosind parametrul post_status
Nu reușesc să afișez drafturile cu WP_Query, chiar și atunci când post_status este setat la 'any' sau 'draft'
$args = array(
'p' => 1234,
'post_type' => 'any',
'post_status' => 'any'
);
$query = new WP_Query( $args );
while ( $query->have_posts() ) : $query->the_post();
// afișează postarea
endwhile;
wp_reset_postdata();
Dacă revin și public postarea 1234, WP_Query o preia fără probleme. Dar când este un draft, nici any
și nici draft
nu o preiau.
Am citit că parametrul exclude_from_search
din register_post_type()
împiedică postările să apară cu WP_Query, așa că l-am setat la false în tipul de postare pe care îl preiau, astfel:
$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);
Omit ceva aici? Nu înțeleg de ce o postare draft în acest tip de postare nu ar apărea în interogarea de mai sus.

Încearcă să-l transmiți ca un array.
De exemplu
$args = array(
'p' => 1234,
'post_type' => 'any',
'post_status' => array('draft')
);
Sau pentru toate tipurile
$args = array(
'p' => 1234,
'post_type' => 'any',
'post_status' => array('publish', 'pending', 'draft', 'auto-draft', 'future', 'private', 'inherit', 'trash')
);

Din păcate, asta nu a funcționat. Conform codex-ului și trac-ului, post_status ar trebui să accepte la fel de bine un șir de caractere, un array sau un șir de caractere separat prin virgule.

Pot confirma că această soluție a funcționat pentru mine, când am avut nevoie să obțin postări în așteptare și ciorne. Mulțumesc

Tocmai am dat peste exact același scenariu. În opinia mea, ar trebui să funcționeze, dar când am încercat combinația 'p' => 123
și 'post_status' => 'any'
, nu returna postarea dacă statusul acesteia era draft.
Am reușit să rezolv problema folosind 'post__in' => array( 123 )
în loc. Deci:
$args = array(
'post__in' => array( 123 ),
'post_type' => 'any',
'post_status' => 'any',
);
$query = new WP_Query( $args );
// ... etc.

Ar trebui atunci să schimb și $query în $posts în $query->have_posts()
și $query->the_post()
?

Da, deși ai putea să redenumești variabila mea $query
în $my_query
și variabila mea $posts
în $query
și nu ar face mare diferență. Practic, problema pe care încerc să o ocolesc este eșecul procesării interogării... de fapt, unde ai pus acel print_r()
pe care l-ai făcut?

L-am pus după WP_Query și înainte de buclă, astfel: $query = new WP_Query( $args ); print_r($query); while ( $query->have_posts() ) : $query->the_post();
.
