query_posts() sul valore di una chiave o sulla sua esistenza

7 gen 2011, 05:35:57
Visualizzazioni: 752
Voti: 1

Recentemente ho iniziato a utilizzare Simple Fields in un progetto per differenziare i tipi di post. D'ora in poi tutti i post avranno uno dei quattro possibili valori meta associati (Storia, Articolo, Video o Cartone). Nessuno di questi tipi di post ha attributi o valori unici, quindi ho deciso di non utilizzare i custom post type questa volta.

Sono consapevole di come interrogare i post con un certo valore meta, ma questo funziona solo per i post che hanno già quella chiave meta associata - non per i post creati prima dell'installazione del plugin Simple Fields e messi in uso. Mi chiedo come potrei interrogare tutti i post che mancano della chiave meta "fizzbuzz" o che hanno la chiave ma è associata a un valore di "foobar".

Esiste un modo per interrogare tutti i post che mancano completamente di una chiave?

0
Tutte le risposte alla domanda 1
5

Questo ti darà tutto ciò che non ha la meta chiave fizzbizz. La parte del custom loop, l'ho presa direttamente dal codex.

$pageposts = $wpdb->get_results("
    SELECT * FROM wp_posts p 
    LEFT JOIN wp_postmeta m 
    ON p.ID = m.post_id 
    WHERE m.meta_key <> 'fizzbizz'
    OR m.metakey IS NULL
    ORDER BY p.post_date DESC;
");

if ($pageposts):
    global $post;
    foreach ($pageposts as $post): 
    setup_postdata($post);
// ora sei nel loop, usa the_title() o qualsiasi altra funzione

Questo ti darà tutto dove c'è la chiave, ma il valore è 'foobar'

$pageposts = $wpdb->get_results("
    SELECT * FROM wp_posts p 
    JOIN wp_postmeta m 
    ON p.ID = m.post_id 
    WHERE m.meta_key = 'fizzbizz' 
    AND m.meta_value = 'foobar' 
    ORDER BY p.post_date DESC;
");

e quest'ultimo è complicato, non sono così sicuro su quello...

Modifica

Prima query corretta grazie a questa domanda.

7 gen 2011 05:51:49
Commenti

La seconda query dovrebbe funzionare, ma puoi fare la stessa cosa meglio utilizzando le funzioni dell'API di WP. La prima query a me non sembra funzionare. Sembra che otterrà solo i post che hanno meta key impostate (perché altrimenti, non sarebbero inclusi nel JOIN.)

goldenapples goldenapples
7 gen 2011 09:50:46

@golden Ottima osservazione sulla prima. Immagino che per scrivere quella correttamente, ci dovrebbe prima essere un modo per interrogare i post che non hanno alcuna chiave. Hai qualche idea su questo?

JakeParis JakeParis
7 gen 2011 17:41:18

@golden ho sistemato la prima query.

JakeParis JakeParis
7 gen 2011 19:11:28

Fantastico! Non avevo mai capito il LEFT JOIN, quindi non avevo idea di come farlo (e credimi, ne ho avuto bisogno!) Ora l'unica cosa da fare è capire come usare quella sintassi all'interno dei metodi dell'API di WP. Ad esempio, la seconda query potrebbe essere scritta semplicemente come get_posts('meta_key=fizzbizz&meta_value=foobar'); Penso che per interrogare l'assenza di una meta key siano necessari filtri speciali su 'posts_join' e 'posts_where'... qualcuno ha una soluzione semplice?

goldenapples goldenapples
7 gen 2011 20:09:46

Penso che tu abbia bisogno anche di una clausola DISTINCT nel SELECT se lo fai in quel modo, altrimenti otterrai un particolare post più volte se ha più valori meta.

goldenapples goldenapples
7 gen 2011 20:34:01