it-swarm.com.de

query_posts () auf den Wert des Schlüssels oder die Existenz des Schlüssels

Vor kurzem habe ich begonnen, einfache Felder in einem Projekt zu verwenden, um zwischen verschiedenen Beitragstypen zu unterscheiden. Alle Posts haben ab sofort einen von vier möglichen Metawerten (Story, Artikel, Video oder Cartoon). Keiner dieser Beitragstypen hat eindeutige Attribute oder Werte, daher habe ich mich dieses Mal gegen den benutzerdefinierten Beitragstyp entschieden.

Ich weiß, wie Beiträge mit einem bestimmten Meta-Wert abgefragt werden können, aber dies funktioniert nur für Beiträge, denen bereits dieser Meta-Schlüssel zugeordnet ist - nicht für Beiträge, die erstellt wurden, bevor das Plugin für einfache Felder installiert und verwendet wurde. Ich bin gespannt, wie ich nach allen Posts fragen würde, bei denen entweder der Metaschlüssel "fizzbuzz" fehlt oder der Schlüssel vorhanden ist, der jedoch mit dem Wert "foobar" verknüpft ist.

Gibt es eine Möglichkeit, nach allen Posts zu suchen, denen ein Schlüssel fehlt?

1
Sampson

Dadurch erhalten Sie alles, was nicht über den Meta-Key Fizzbizz verfügt . Den Custom Loop Teil habe ich direkt aus dem Codex gehoben .

$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);
// now you are in the loop, use the_title() or whatever

Dies wird alles bekommen, wo es den Schlüssel hat, aber der Wert ist '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;
");

und das letzte ist knifflig, da bin ich mir nicht so sicher ...

Bearbeiten

Erste Abfrage dank dieser Frage korrigiert.

1
JakeParis