Posso interrogare i meta dati personalizzati attraverso WP_Query
Ok, la mia domanda è un po' complessa quindi cercherò di dare una spiegazione generale e poi entrare nei dettagli.
Sto utilizzando WordPress 3.4.2 e sto usando WCK Post Type Creator e WCK Custom Fields Creator per creare il mio custom post type e i campi personalizzati.
Sto cercando di interrogare i post dal custom post type 'business' che hanno un campo personalizzato 'special' associato. Il mio problema è che vorrei essere più specifico e ottenere solo un certo tipo di special (che è impostato nel plugin Custom Fields Creator) ma non so se/come posso farlo usando l'argomento meta_query per WP_Query.
Quello che ho ora estrarrà i post dal post type ma poi devo usare get_post_meta() per trovare i campi personalizzati e ciclare attraverso di essi facendo test per quello che voglio. Ecco quello che ho al momento:
<?php
$args = array(
'post_type' => 'business',
'meta_query' => array(
array(
'key' => 'specials'
)
)
);
$loop = new WP_Query( $args );
while ( $loop->have_posts() ) : $loop->the_post();
$specials = get_post_meta( $post->ID, 'specials');
//Ciclo attraverso l'array degli specials
foreach( $specials as $special){
//Ciclo attraverso ogni special
foreach($special as $individual){
//Controllo se c'è uno special sulle bevande
if ($individual ['type-of-special'] == 'Drink' ) {
//Fai qualcosa
}//individual
}//special
} //specials
endwhile; ?>
Quindi, quello che sto facendo qui è estrarre i post e poi per ogni post ottenere i meta dati 'specials' e ciclare attraverso i diversi array per controllare che tipo di special è e poi mostrare contenuti se è il tipo giusto di special. C'è un modo per essere più specifici nella mia WP_query così da restituire solo i post che sono di un certo tipo di special?
Il problema che sembro incontrare è che non so come scavare abbastanza in profondità negli array multidimensionali che il campo personalizzato 'specials' ha per controllare i valori con l'argomento meta_query per WP_Query.
Se stampo $special nel foreach($specials as $special) ottengo questo:
Array
(
[0] => Array
(
[type-of-special] => Drink
[name-of-special] => Pumpkin Latte
[price] => 2.00
[day-of-the-week] => Lunedì, Martedì, Mercoledì, Giovedì, Venerdì, Sabato, Domenica
)
)
Quindi non so come arrivare alla chiave [type-of-special] per controllare il suo valore attraverso meta_query.
So che queste sono molte informazioni e apprezzo davvero qualsiasi feedback e aiuto per risolvere questo problema. Se avete bisogno di maggiori informazioni o chiarimenti su qualcosa fatemelo sapere. Grazie ancora!

Normalmente dovresti specificare semplicemente un meta_value, ad esempio:
$args = array(
'post_type' => 'business',
'meta_query' => array(
array(
'key' => 'specials',
'value' => 'questi non sono gli speciali che stai cercando - Obi Wan Kenobi'
)
)
);
Tuttavia, poiché i tuoi post meta sono in realtà una struttura dati, un array/oggetto PHP serializzato, questo non è possibile.
Puoi leggere di più qui:
http://codex.wordpress.org/Class_Reference/WP_Query#Custom_Field_Parameters

Non sono sicuro di come formattare il campo 'value' perché le informazioni che devo verificare sono contenute in un array. Ho provato questi: 'value' => 'Drink' 'value' => 'type-of-special' 'value' => array([type-of-special]=>'Drink')
ma nessuno di questi funziona. Hai idea di come dovrei formattarlo per accedere a quegli array? Grazie

perché faresti 'value' => 'type-of-special' 'value' => array([type-of-special]=>'Drink')? Accedi semplicemente al campo dell'array che ti interessa, è PHP di base, ad esempio per accedere all'elemento 5 nell'array 'stuff' fai $thefifthvalueinstuff = $stuff[5];

in realtà guardando il tuo codice anche la tua domanda di follow up non ha senso. Impostalo su 'Drink', e non dovrai verificare se è di tipo drink perché verranno restituiti solo i tipi drink

Penso che il problema sia con il modo in cui WCK Custom Fields Creator memorizza i campi personalizzati che crea. La meta box personalizzata è 'specials' ma 'Drink' è solo un'informazione contenuta all'interno di quel campo personalizzato, quindi non viene riconosciuta da meta_query come 'key'.
Ecco perché ho pubblicato l'output di $special, perché ho bisogno di aiuto per capire come accedere alle informazioni contenute all'interno di quegli array. Scusa per la confusione. Grazie

Ma la tua meta query avviene prima del loop, non hai ancora nessuno di quei dati quindi non puoi usarli nei tuoi argomenti di query

Ok bene, continuerò a fare i controlli all'interno del Loop, non ero sicuro se ci fosse un modo più corretto di farlo rispetto a come stavo facendo. Apprezzo molto il tuo aiuto! Grazie

AHA scusa ora ho capito, dovrai memorizzare i tuoi post meta in modo diverso, poiché i valori dei post meta sono oggetti serializzati

$args = array(
'post_type' => "tuo_tipo_di_post",
'meta_key' => 'nome_della_meta_key',
'meta_compare' => '=', // vedi documentazione per le opzioni di confronto
'meta_value ' => 'il_valore_che_vuoi_cercare'
);
$posts = new WP_Query( $args );
https://developer.wordpress.org/reference/classes/wp_query/#custom-field-post-meta-parameters
se vuoi cercare elementi che non sono vuoti
$args = array(
'post_type' => "tuo_tipo_di_post",
'meta_key' => 'nome_della_meta_key',
'meta_compare' => '!=',
'meta_value ' => ''
);
$posts = new WP_Query( $args );
