Ausschließen von Beiträgen mit einem bestimmten Wert von meta_key, die Beiträge ohne diesen meta_key beibehalten

Es gibt Lösungen für dieses Problem, aber was ich finden konnte, sind alle von vor langer Zeit. Also suche ich nach einer Lösung (wenn es welche gibt), die aktuelle Updates berücksichtigt.

Ich habe einen wpse_city , der ein wpse_city mit mehreren Werten ist. Jetzt möchte ich Beiträge mit wpse_city = 'dhaka' aber ich möchte auch Beiträge wpse_city = 'dhaka' die keinen wpse_city Schlüssel haben. So mache ich das so:

 $args['meta_query'] = array( 'relation' => 'OR', array( 'key' => 'wpse_city', 'value' => 'dhaka', 'compare' => 'NOT EXISTS', ), array( 'key' => 'wpse_city', 'value' => 'dhaka', 'compare' => '!=', ) ); 

Mache ich es richtig? Gibt es einen anderen besseren Weg, dies zu erreichen?

Solutions Collecting From Web of "Ausschließen von Beiträgen mit einem bestimmten Wert von meta_key, die Beiträge ohne diesen meta_key beibehalten"

Sie haben es fast geschafft – es ist nur ein Problem mit der Logik. Was du im Grunde sagst, ist “bekomme Beiträge, die diesen Metaschlüssel nicht haben, oder wo dieser Metaschlüssel nicht gleich ‘dhaka’ ist”. Das Problem ist, dass Beiträge ohne diesen Meta-Schlüssel überhaupt nicht gleich “dhaka” sind, also passen sie zusammen!

Sie können dies mit einer verschachtelten meta_query unter Verwendung einer AND-Relation beheben, um zu überprüfen, ob der Schlüssel auch existiert, wenn Sie vergleichen wollen, was nicht gleich ist. So was:

 $args['meta_query'] = array( 'relation' => 'OR', array( 'key' => 'wpse_city', 'compare' => 'NOT EXISTS', ), array( 'relation' => 'AND', array( 'key' => 'wpse_city', 'compare' => 'EXISTS', ), array( 'key' => 'wpse_city', 'value' => 'dhaka', 'compare' => '!=', ) ) ); 

Sie müssen auch keinen Wert mehr angeben, wenn Sie EXISTS und NOT EXISTS verwenden – dies war auf einen alten Fehler zurückzuführen. Weitere Informationen hierzu finden Sie in der WP_Meta_Query-Dokumentation .