Ich möchte über WP_Query
für den Test “Hallo” einschließlich des letzten nachgestellten Leerzeichen suchen.
Ist das möglich und wenn ja, wie mache ich das?
Wenn es überhaupt möglich ist, so wird es gemacht:
$searchquery = new WP_Query( array( 's' => 'hello ' ));
Da alle Anfragen auf ihre grundlegendste Ebene auf WP_Query
werden, können wir feststellen, ob es möglich ist, die WordPress-APIs zu verwenden, indem wir den Code in wp-includes/query.php
// If a search pattern is specified, load the posts that match if ( !empty($q['s']) ) { // added slashes screw with quote grouping when done early, so done later $q['s'] = stripslashes($q['s']); if ( !empty($q['sentence']) ) { $q['search_terms'] = array($q['s']); } else { preg_match_all('/".*?("|$)|((?< =[\r\n\t ",+])|^)[^\r\n\t ",+]+/', $q['s'], $matches); $q['search_terms'] = array_map('_search_terms_tidy', $matches[0]); } $n = !empty($q['exact']) ? '' : '%'; $searchand = ''; foreach( (array) $q['search_terms'] as $term ) { $term = esc_sql( like_escape( $term ) ); $search .= "{$searchand}(($wpdb->posts.post_title LIKE '{$n}{$term}{$n}') OR ($wpdb->posts.post_content LIKE '{$n}{$term}{$n}'))"; $searchand = ' AND '; } if ( !empty($search) ) { $search = " AND ({$search}) "; if ( !is_user_logged_in() ) $search .= " AND ($wpdb->posts.post_password = '') "; } } // Allow plugins to contextually add/remove/modify the search section of the database query $search = apply_filters_ref_array('posts_search', array( $search, &$this ) );
Daraus können wir bestimmen, dass die Suchzeichenfolge in mehreren Phasen entfernt und bereinigt wird, und alle zusätzlichen Leerzeichen werden als Teil des Sanitisierungsprozesses entfernt.
Die einzige Möglichkeit, eine solche Suche durchzuführen, besteht darin, diesen process mit dem posts_search
Filter zu reproduzieren, um den SQL mithilfe Ihres eigenen posts_search
zu reproduzieren, aber ich empfehle dies aus Sicherheits- und Wartungsgründen dringend. Ich würde Ihnen jedes System empfehlen, das Sie haben, es wäre leichter, es neu zu gestalten, als diesen Weg einzuschlagen, und man könnte argumentieren, dass dies verantwortungslos als Entwickler und nicht trivial wäre.
Stattdessen schlage ich vor, dass Sie Ihre Suche mit einem dedizierten SQL-Tool wie Workbench und einer Abfrage ähnlich der folgenden durchführen:
SELECT * FROM wp_posts WHERE post_content LIKE "hello " LIMIT 0,10