Interogare WP Query pentru valoarea meta post

18 nov. 2014, 16:58:05
Vizualizări: 35.2K
Voturi: 6

Î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.

0
Toate răspunsurile la întrebare 3
0

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 );
18 nov. 2014 17:24:45
0

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:

meta_query cu valori meta ca array-uri serializate

18 nov. 2014 17:14:03
0

Î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:

  1. Preia TOATE articolele și parcurge-le în memorie căutând metadatele corecte, sau
  2. 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);

18 nov. 2014 17:23:09