query_posts() sul valore di una chiave o sulla sua esistenza
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?

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.

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

@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?

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?
