Come interrogare post e custom post type con meta key in WordPress

2 feb 2013, 20:29:59
Visualizzazioni: 15.2K
Voti: 1

Sto cercando di interrogare sia il custom post type ai1ec_event del plugin all-in-one-event-calendar che i normali post di WordPress in uno slider sulla mia homepage. Questo funziona abbastanza bene.

Ora vorrei interrogare solo i post che hanno il valore "teaser" nel campo personalizzato, ma questa query restituisce solo i post normali, non gli eventi.

<?php
query_posts( array(
'post_type'=>array('post','ai1ec_event'),   
'posts_per_page' => 50,
'meta_query' => array(
    array(
        'key' => 'teaser',
        'value' => 'on'        
    )
)
);
?>

Anche se rimuovo la query per il tipo di post:

<?php
query_posts( array(
'meta_query' => array(
    array(
        'key' => 'teaser',
        'value' => 'on'        
    )
)
);
?>

restituisce solo post, nessun evento.

0
Tutte le risposte alla domanda 1
6

Temo che WP_Query non sia in grado di recuperare (Post con campi personalizzati) o (ai1ec_event). Dovrai prima interrogare il primo, poi il secondo e unire gli array risultanti. Usa WP_Query invece di query_posts.

Ho appena provato sulla mia installazione locale e questo codice chiamato da index.php di twentytwelve funziona (restituisce un post con titolo "Hello post" e un ai1ec_event con titolo "Event" - entrambi con il campo personalizzato "teaser" con valore "on")

$events_query = new WP_Query( array('post_type' => array('ai1ec_event', 'post'), 'meta_query' => array( array( 'key' => 'teaser', 'value' => 'on' ) )) );
while ( $events_query->have_posts() ) :
    $events_query->the_post();
    echo get_the_title() . '<br/>';
endwhile;

Devo dire che entrambi (post e evento) sono stati creati dall'utente admin - ho controllato il codice e c'è un'ampia parte che gestisce i permessi personalizzati.

2 feb 2013 21:08:57
Commenti

Non penso che funzionerà. Ho segnalato il comportamento errato. Vedi la domanda corretta sopra. Non l'avevo notato inizialmente, ma includere la query della meta key RESTITUISCE SEMPRE solo i post.

Sebastian Starke Sebastian Starke
2 feb 2013 22:00:26

il tuo ai1ec_event contiene il campo personalizzato teaser tra i meta?

david.binda david.binda
2 feb 2013 22:10:18

Sì, lo contiene ed è attivato.

Sebastian Starke Sebastian Starke
2 feb 2013 22:12:00

Ho appena verificato questo task nella mia installazione locale - ho modificato la risposta sopra.

david.binda david.binda
2 feb 2013 22:39:12

L'ho verificato due volte: per me restituisce solo post. Quale potrebbe essere il motivo di questo comportamento?

Sebastian Starke Sebastian Starke
2 feb 2013 22:51:33

Ho capito: la sintassi esatta deve essere: 'meta_query' => array( array( 'key' => 'teaser', 'value' => '"on"', 'compare' => 'LIKE' ) ) Non sono sicuro se il mio codice originale avrebbe funzionato, ma sei stato di grande aiuto, quindi segnerò la tua risposta come corretta. Grazie!

Sebastian Starke Sebastian Starke
2 feb 2013 23:15:02
Mostra i restanti 1 commenti