Nu pot obține drafturile cu WP_Query folosind parametrul post_status

16 feb. 2012, 02:02:25
Vizualizări: 15K
Voturi: 1

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.

6
Comentarii

ce obții dacă folosești print_r( $query )? Mă întreb dacă have_posts() sau the_post() împiedică afișarea drafturilor...

mor7ifer mor7ifer
16 feb. 2012 03:57:00

Iată rezultatul afișării interogării: http://pastebin.com/MpZK2vPf

supertrue supertrue
16 feb. 2012 09:15:48

Și acesta este rezultatul print_r() pe $query?!? Se pare că nu interoghează...vezi răspunsul meu.

mor7ifer mor7ifer
16 feb. 2012 12:35:05

Ai încercat să înlocuiești p cu post__in?

mrwweb mrwweb
23 mai 2012 19:59:37

Interogarea ta -- prima din întrebarea ta -- funcționează pentru mine cu câteva tipuri de postări diferite. Bănuiesc că ai un plugin sau ceva în tema ta care manipulează interogările într-un mod care strică această funcționalitate. Dezactivează pluginurile și treci la tema implicită pentru a vedea ce se întâmplă.

s_ha_dum s_ha_dum
4 nov. 2012 17:43:40

@supertrue ai găsit o soluție pentru această problemă?

Capiedge Capiedge
3 apr. 2017 19:36:36
Arată celelalte 1 comentarii
Toate răspunsurile la întrebare 3
3

Î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')
);
16 feb. 2012 02:19:42
Comentarii

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.

supertrue supertrue
16 feb. 2012 02:55:01

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

Jase Whatson Jase Whatson
11 dec. 2012 00:32:16

Tocmai am făcut un test cu versiunea 4.7.2 cu 'post_type' ca array de 'any' și ca șir de caractere 'any' [adică 'post_type' => array('any') 'post_type' => 'any' ] și ambele parametre au reușit să obțină postările în stadiu de ciornă

Rick Hellewell Rick Hellewell
17 feb. 2017 00:49:16
0

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.
18 oct. 2017 17:44:02
5

Se pare că ai o problemă ciudată. Încearcă să înlocuiești linia simplă WP_Query cu următoarele:

$query = new WP_Query();
$posts = $query->query( $args );
16 feb. 2012 12:36:48
Comentarii

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

supertrue supertrue
16 feb. 2012 16:21:12

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?

mor7ifer mor7ifer
17 feb. 2012 03:46:32

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();.

supertrue supertrue
17 feb. 2012 20:44:54

Da, încearcă să apelezi metoda query() și vezi cum merge.

mor7ifer mor7ifer
18 feb. 2012 06:54:05

Este vreo soluție la asta?

Ben Racicot Ben Racicot
7 mar. 2015 18:30:08