Come interrogare post e custom post type con meta key in WordPress
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.

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.

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.

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

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

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

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!
