Meta Query funktioniert nicht wie erwartet

Ich habe ein kleines Problem mit Meta-Abfragen. I Eine Abfrage zum Abrufen von Posts, in denen eines dieser Wörter vorhanden ist, wurde im benutzerdefinierten Feld pickup_address erstellt. Das Feld hat diesen String in seinem Meta-Wert: 43 Longview Drive, Papamoa

BEARBEITEN

Dies ist die Meta-Abfrage, die ich verwende:

$args = array( 'post_type' => 'posts', 'meta_query' => array( 'relation' => 'OR', array( 'key' => 'pickup_address', 'value' => 'Papamoa', 'compare' => 'LIKE', ), array( 'key' => 'pickup_address', 'value' => 'Bah a', 'compare' => 'LIKE', ), array( 'key' => 'pickup_address', 'value' => 'de', 'compare' => 'LIKE', ), array( 'key' => 'pickup_address', 'value' => 'Plenty', 'compare' => 'LIKE', ), ), 

);

Dies ist der Code, den ich aus den Meta-Abfragen generiere:

 SELECT SQL_CALC_FOUND_ROWS wpiw_posts.ID FROM wpiw_posts INNER JOIN wpiw_postmeta ON ( wpiw_posts.ID = wpiw_postmeta.post_id ) WHERE 1=1 AND ( ( ( wpiw_postmeta.meta_key = 'pickup_address' AND wpiw_postmeta.meta_value LIKE '%Papamoa%' ) OR ( wpiw_postmeta.meta_key = 'pickup_address' AND wpiw_postmeta.meta_value LIKE '%Bah a%' ) OR ( wpiw_postmeta.meta_key = 'pickup_address' AND wpiw_postmeta.meta_value LIKE '%de%' ) OR ( wpiw_postmeta.meta_key = 'pickup_address' AND wpiw_postmeta.meta_value LIKE '%Plenty%' ) ) ) AND wpiw_posts.post_type = 'project' AND ((wpiw_posts.post_status = 'publish')) GROUP BY wpiw_posts.ID ORDER BY wpiw_posts.post_date DESC LIMIT 0, 10 

Ich habe versucht, das Sonderzeichen zu ersetzen, funktioniert aber auch nicht

WordPress gib mir nichts über die Wp_Query ($ query_args) aber wenn ich das in MySql ausführe funktioniert es. Jede Hilfe sollte geschätzt werden

BEARBEITEN 2

Ich erfasse die Abfrage, die WordPress nach der Konvertierung der Meta_Abfrage-Argumente nach MySql ausführt:

 SELECT SQL_CALC_FOUND_ROWS wpiw_posts.ID FROM wpiw_posts INNER JOIN wpiw_postmeta ON ( wpiw_posts.ID = wpiw_postmeta.post_id ) INNER JOIN wpiw_postmeta AS mt1 ON ( wpiw_posts.ID = mt1.post_id ) WHERE 1=1 AND ( ( ( wpiw_postmeta.meta_key = 'pickup_address' AND wpiw_postmeta.meta_value LIKE '%Papamoa%' ) OR ( wpiw_postmeta.meta_key = 'pickup_address' AND wpiw_postmeta.meta_value LIKE '%BahÃa%' ) OR ( wpiw_postmeta.meta_key = 'pickup_address' AND wpiw_postmeta.meta_value LIKE '%de%' ) OR ( wpiw_postmeta.meta_key = 'pickup_address' AND wpiw_postmeta.meta_value LIKE '%Plenty%' ) ) AND ( mt1.meta_key = 'deliver_address' AND mt1.meta_value LIKE '%Auckland%' ) ) AND wpiw_posts.post_type = 'project' AND ((wpiw_posts.post_status = 'publish')) GROUP BY wpiw_posts.ID ORDER BY wpiw_posts.post_date DESC LIMIT 0, 10 

Ich bemerke die seltsamen Chacarters Bahá ‘, aber wenn ich diese Abfrage anwende und auf MySql laufe, funktioniert es! ruft 1 Zeile ab, weil ein Beitrag ein Feld pickup_address mit dem Wort Papamoa hat und ein Feld deliver_address mit der Arbeit Auckland hat.

Solutions Collecting From Web of "Meta Query funktioniert nicht wie erwartet"

Mariolex,

Haben Sie versucht, meta_query zu verwenden? Ich schrieb etwas schnell und ungetestet, aber es könnte den Trick machen:

 $args = array( 'post_type' => 'posts', 'showposts' => '-1', 'meta_query' => array( array( 'key' => 'pickup_address', //meta_key 'value' => '43 Longview Drive, Papamoa', //meta_value 'compare' => 'LIKE', //compare ), ), ); $query = new WP_Query( $args ); print_r($query); 

Wenn dies nicht funktioniert, können Sie möglicherweise eine ähnliche Abfrage erstellen, indem Sie jeden Teil der Phrase in einzelne Arrays der Meta-Abfrage-Optionen aufteilen. Ich denke nicht, dass du das tun musst, da der LIKE-Vergleich das finden sollte, was du suchst.

Sehen Sie sich die Meta Query-Dokumentation auf WordPress.org an – es ist ein leistungsfähiges Werkzeug, das ich ständig für Situationen wie diese verwende.

Quellen:

BEARBEITEN

Ich habe Ihre Anfrage falsch verstanden, als ich sie zum ersten Mal gelesen habe. Sie können dies versuchen, um zu sehen, ob Sie eine Übereinstimmung für den Wert “43 Longview Drive, Papamoa” erhalten.

 $args = array( 'post_type' => 'posts', 'showposts' => '-1', 'meta_query' => array( 'relation' => 'AND', array( 'key' => 'pickup_address', //meta_key 'value' => 'Papamoa', //meta_value 'compare' => 'LIKE', //compare ), array( 'key' => 'pickup_address', //meta_key 'value' => 'Bah a', //meta_value 'compare' => 'LIKE', //compare ), array( 'key' => 'pickup_address', //meta_key 'value' => 'de', //meta_value 'compare' => 'LIKE', //compare ), array( 'key' => 'pickup_address', //meta_key 'value' => 'Plenty', //meta_value 'compare' => 'LIKE', //compare ), ), ); $query = new WP_Query( $args ); 

Möglicherweise müssen Sie RELATION auf “oder” schalten, wenn Sie beides suchen.

Nach einer langen Debug-Zeit habe ich herausgefunden, was passiert ist.

Es scheint, dass WordPress nicht sehr gut die lateinische Interpunktion behandelt, wie Akzentvokale (á, é, í, ó, ú) und andere Zeichen.

Verwenden Sie diese Methode: Akzentuierte Zeichen ersetzen php Ich ändere die Vokale vor dem Senden der Daten an MySql, und jetzt zeigen WordPress die Beiträge