Non riesco a ottenere le bozze con WP_Query usando il parametro post_status

16 feb 2012, 02:02:25
Visualizzazioni: 15K
Voti: 1

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é anydraft 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.

6
Commenti

cosa ottieni se fai print_r( $query )? Mi chiedo se have_posts() o the_post() stiano impedendo la visualizzazione delle bozze...

mor7ifer mor7ifer
16 feb 2012 03:57:00

Ecco il risultato della stampa della query: http://pastebin.com/MpZK2vPf

supertrue supertrue
16 feb 2012 09:15:48

E quello è un print_r() su $query?!? Sembra che non stia effettivamente facendo la query...vedi la mia risposta.

mor7ifer mor7ifer
16 feb 2012 12:35:05

Hai provato a sostituire p con post__in?

mrwweb mrwweb
23 mag 2012 19:59:37

La tua query-- la prima nella tua domanda-- funziona per me con un paio di diversi tipi di post. Sospetto che tu abbia un plugin o qualcosa nel tuo tema che sta manipolando le tue query in modo da interrompere questa. Disabilita i tuoi plugin e passa al tema predefinito per vedere cosa succede.

s_ha_dum s_ha_dum
4 nov 2012 17:43:40

@supertrue hai trovato una soluzione per questo?

Capiedge Capiedge
3 apr 2017 19:36:36
Mostra i restanti 1 commenti
Tutte le risposte alla domanda 3
3

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

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.

supertrue supertrue
16 feb 2012 02:55:01

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

Jase Whatson Jase Whatson
11 dic 2012 00:32:16

Ho appena fatto un test con 4.7.2 con 'post_type' come array di 'any', e una stringa di testo 'any' [quindi 'post_type' => array('any') 'post_type' => 'any' ] e entrambi i parametri sono stati in grado di ottenere post bozza

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

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

Sembra che tu abbia a che fare con uno strano bug. Prova a sostituire la riga singola di WP_Query con il seguente codice:

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

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

supertrue supertrue
16 feb 2012 16:21:12

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?

mor7ifer mor7ifer
17 feb 2012 03:46:32

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

supertrue supertrue
17 feb 2012 20:44:54

Sì, prova a chiamare il metodo query() e vedi come va.

mor7ifer mor7ifer
18 feb 2012 06:54:05

Qualche soluzione a questo?

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