Interogare WP Query pentru valoarea meta post
Încerc să obțin postările care au aplicată valoarea meta trainees
.
$args = array(
'posts_per_page' => -1,
'orderby' => 'post_date',
'order' => 'DESC',
'post_status' => 'publish',
'meta_query' => array(
array(
'key' => 'enterprise_on_page',
'value' => array( 'trainees' ),
'compare' => 'IN',
),
),
);
$enterprise_posts = get_posts( $args );
În câmpul meu meta cu cheia enterprise_on_page am stocat anterior un array() ca update_post_meta( $post_id, 'enterprise_on_page', array('trainees', 'staff') );
.
Dacă apelez var_dump(get_post_meta($post->ID))
obțin următoarea ieșire:
'enterprise_on_page' =>
array (size=1)
0 => string 'a:2:{i:0;s:8:"trainees";i:1;s:7:"staff";}'
Cum pot modifica interogarea mea astfel încât să fie afișate doar postările cu valoarea meta trainees
? Momentan nu obțin nicio postare.
Mulțumesc lui @Howdy_McGee. El mi-a dat indiciul să caut după interogări meta serializate. Cu acest cod obțin rezultatul dorit.
$args = array(
'posts_per_page' => -1,
'orderby' => 'post_date',
'order' => 'DESC',
'post_status' => 'publish',
'meta_query' => array(
array(
'key' => 'enterprise_on_page',
'value' => serialize(strval('trainees')),
'compare' => 'LIKE',
),
),
);
$enterprise_posts = get_posts( $args );

Nu cred că poți compara cu acuratețe valorile pentru un Array Serializat, ceea ce se întâmplă de fiecare dată când treci un array la update_post_meta
. Este necesar să obții întreaga valoare în timpul buclei folosind:
get_post_meta( $post->ID, 'enterprise_on_page', 1 )
Dacă trebuie să specifici interogări bazate pe aceste valori, cel mai bine este să le salvezi separat.
Consultă această întrebare pentru mai multe informații:

În structura actuală a datelor tale, nu poți folosi SQL pentru asta (cel puțin nu într-un mod performant). Ai două opțiuni:
- Preia TOATE articolele și parcurge-le în memorie căutând metadatele corecte, sau
- Stochează valorile metadatelor separat.
Dintre cele două, recomand a doua variantă. WordPress îți permite să stochezi mai multe rânduri cu aceeași metadată pentru un singur articol, astfel încât poți obține un array de date fără a fi nevoie să le serializați și să le stocați într-o singură cheie. Pentru a face asta, trebuie să modifici ușor modul în care interacționezi cu API-ul de metadate aici. Ceva de genul acesta ai nevoie:
Când obții metadatele articolului, ai folosi:
get_post_meta($ID, 'enterprise_on_page', false);
Actualizarea ar fi cea mai diferită. Dacă vrei doar să adaugi o valoare, folosește:
add_post_meta($ID, 'enterprise_on_page', $value);
Pentru a actualiza o valoare:
update_post_meta($ID, 'enterprise_on_page', $new_value, $old_value);
Și pentru a șterge o valoare:
delete_post_meta($ID, 'enterprise_on_page', $value_to_delete);
