Vergleichen Sie Metaabfrage in get_posts-Argumenten

Ich möchte bestimmte Beiträge mit einem benutzerdefinierten Feld ausschließen. Also, wenn my_custom_field_ignore gesetzt ist UND 1 diesen Beitrag ignorieren. Wenn es nicht eingestellt ist, schließen Sie es ein.

Das habe ich

  $args = array( 'post_type' => $post_type, 'offset' => $offset, 'meta_query' => array( array( 'key' => 'my_custom_field_ignore', 'value' => '1', 'compare' => '!=', ) ) ); 

Dies funktioniert nur für Posts, bei denen my_custom_field_ignore auf etwas anderes als 1

Wie kann ich alle Beiträge my_custom_field_ignore = 1 (natürlich nicht die mit my_custom_field_ignore = 1 )?

Bearbeiten:

So funktioniert es auf WP 3.5+

  'meta_query' => array( array( 'key' => 'my_custom_field_ignore', 'compare' => 'NOT EXISTS', ) ) 

Diese einfache Suche nach dem Aussehen von my_custom_field_ignore so dass der Wert ignoriert wird. Während dies in erster Linie funktionieren könnte, können Benutzer verwirrt werden, wenn sie sich von 1 zu 0 ändern und erwarten, dass sie einbezogen werden.

Scheint, dass 3.3 und 3.4 eine bedingte Prüfung benötigen.

Bearbeiten 2

Scheint das überprüfte beantwortet tut den Trick (mindestens für 3.5+). Aus irgendeinem Grund ignoriert es den allerersten Post “Hallo Welt”. Nachdem my_custom_field_ignore hinzugefügt und anschließend entfernt wurde, funktioniert es

Solutions Collecting From Web of "Vergleichen Sie Metaabfrage in get_posts-Argumenten"

Wenn wir die Bedingungen definieren:

 A: my_custom_field_ignore EXISTS B: my_custom_field_ignore = 1 

dann ist NOT ( A && B ) äquivalent zu:

 NOT ( A ) || NOT ( B ) 

das heißt in unserem Fall:

 ( my_custom_field_ignore NOT EXISTS ) || ( my_custom_field_ignore != 1 ) 

Wir könnten daher folgendes für WP 3.5+ (ungetestet) versuchen:

  $args = array( 'post_type' => $post_type, 'offset' => $offset, 'meta_query' => array( 'relation' => 'OR', array( 'key' => 'my_custom_field_ignore', 'value' => '1', 'compare' => '!=', ), array( 'key' => 'my_custom_field_ignore', 'compare' => 'NOT EXISTS', 'value' => '1', #< -- just some value as a pre 3.9 bugfix (Codex) ), ) ); 

Sie müssen die Serialisierungsfunktion verwenden, wenn Sie Ganzzahlen verwenden:

 $args = array( 'meta_query' => array( array( 'key' => 'my_meta_key', 'value' => serialize(strval($my_vale)), 'compare' => 'LIKE' ) ) ); $posts = get_posts( $args ); 

und du bist bereit,

 print_r($posts); 

und sehen Sie die Ergebnisse