Pot interoga metadate personalizate prin WP_Query
Ok, întrebarea mea este puțin complexă, așa că voi încerca să ofer mai întâi o explicație generală și apoi să intru în detalii.
Folosesc WordPress 3.4.2 și utilizez WCK Post Type Creator și WCK Custom Fields Creator pentru a crea tipul meu personalizat de postare și câmpurile personalizate.
Încerc să interoghez postări din tipul personalizat 'business' care au un câmp personalizat 'special' atașat. Problema mea este că aș dori să fiu mai specific și să obțin doar un anumit tip de ofertă specială (care este setat în plugin-ul Custom Fields Creator), dar nu știu dacă/cum pot face acest lucru folosind argumentul meta_query pentru WP_Query.
Ceea ce am acum va extrage postări din tipul de postare, dar apoi trebuie să folosesc get_post_meta() pentru a găsi câmpurile personalizate și să trec prin ele făcând teste pentru ceea ce vreau. Iată ce am momentan:
<?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');
//Trece prin array-ul de oferte speciale
foreach( $specials as $special){
//Trece prin fiecare ofertă specială
foreach($special as $individual){
//Verifică dacă există o ofertă specială pentru băuturi
if ($individual ['type-of-special'] == 'Drink' ) {
//Execută diverse acțiuni
}//individual
}//special
} //specials
endwhile; ?>
Deci, ceea ce fac aici este să extrag postările și apoi pentru fiecare postare să obțin metadatele 'specials' și să trec prin diferitele array-uri pentru a verifica ce tip de ofertă specială este și apoi să afișez lucruri dacă este tipul potrivit de ofertă specială. Există o modalitate de a fi mai specific în WP_query astfel încât să returnez doar postările care sunt de un anumit tip de ofertă specială?
Problema pe care par să o întâmpin este că nu știu cum să ajung suficient de adânc în array-urile multidimensionale pe care le are câmpul personalizat 'specials' pentru a verifica valorile cu argumentul meta_query pentru WP_Query.
Dacă afișez $special în foreach($specials as $special) obțin următoarele:
Array
(
[0] => Array
(
[type-of-special] => Drink
[name-of-special] => Pumpkin Latte
[price] => 2.00
[day-of-the-week] => Monday, Tuesday, Wednesday, Thursday, Friday, Saturday, Sunday
)
)
Deci nu știu cum să ajung la cheia [type-of-special] pentru a-i verifica valoarea prin meta_query.
Știu că sunt multe informații și apreciez foarte mult orice feedback și ajutor pentru a rezolva această problemă. Dacă aveți nevoie de mai multe informații sau clarificări cu privire la ceva, vă rog să-mi spuneți. Mulțumesc din nou!

În mod normal, ai specifica doar o meta_value, de exemplu:
$args = array(
'post_type' => 'business',
'meta_query' => array(
array(
'key' => 'specials',
'value' => 'these are not the specials you are looking for - Obi Wan Kenobi'
)
)
);
Totuși, deoarece meta postul tău este de fapt o structură de date, un array/obiect PHP serializat, acest lucru nu este posibil.
Poți citi mai multe aici:
http://codex.wordpress.org/Class_Reference/WP_Query#Custom_Field_Parameters

Nu sunt sigur cum să format câmpul 'value' deoarece informația pe care trebuie să o verific este ținută într-un array. Am încercat aceste variante: 'value' => 'Drink' 'value' => 'type-of-special' 'value' => array([type-of-special]=>'Drink')
dar niciuna dintre acestea nu funcționează. Ai vreo idee cum ar trebui să formatez asta pentru a accesa acele array-uri? Mulțumesc

de ce ai face 'value' => 'type-of-special' 'value' => array([type-of-special]=>'Drink') ? Pur și simplu accesează câmpul din array pe care îl dorești, PHP de bază. De exemplu, pentru a accesa elementul 5 din array-ul 'stuff' fă $thefifthvalueinstuff = $stuff[5];

de fapt, uitându-mă la codul tău, întrebarea ta ulterioară nu are sens nici ea. Setează-l la 'Drink' și nu va trebui să verifici dacă este tipul drink deoarece vor fi returnate doar tipurile drink

Cred că problema este cum stochează WCK Custom Fields Creator câmpurile personalizate pe care le creează. Caseta meta personalizată este 'specials', dar 'Drink' este doar o informație conținută în acel câmp personalizat, așa că nu este recunoscută de meta_query ca o 'cheie'.
De aceea am afișat conținutul lui $special, pentru că am nevoie de ajutor pentru a înțelege cum să accesez informațiile din acele array-uri. Îmi cer scuze pentru confuzie. Mulțumesc.

Dar interogarea meta se întâmplă înainte de buclă, nu ai încă niciunul din acele date, așa că nu le poți folosi în argumentele interogării.

Ok, în regulă, voi continua să fac verificările în interiorul buclei, nu eram sigur dacă există o metodă mai corectă decât cea pe care o foloseam. Apreciez foarte mult ajutorul tău! Mulțumesc.

AHA, scuze, acum am înțeles - va trebui să stochezi meta datele postării altfel, deoarece valorile meta sunt obiecte serializate

$args = array(
'post_type' => "your_post_type", // tipul postului
'meta_key' => 'name_of_the_meta_key', // cheia meta
'meta_compare' => '=', // vezi documentația pentru opțiuni de comparare
'meta_value ' => 'the_value_you_want to search' // valoarea pe care dorești să o cauți
);
$posts = new WP_Query( $args ); // interogare WP
https://developer.wordpress.org/reference/classes/wp_query/#custom-field-post-meta-parameters
dacă dorești să cauți elemente care nu sunt goale
$args = array(
'post_type' => "your_post_type", // tipul postului
'meta_key' => 'name_of_the_meta_key', // cheia meta
'meta_compare' => '!=', // diferit de
'meta_value ' => '' // valoare goală
);
$posts = new WP_Query( $args ); // interogare WP
