Как сделать Поиск WordPress с учетом регистра?
Добрый день, как сделать с помощью вывода записей WP_Query - вывод записей с учетом регистра?
Это делается для того, чтобы при поиске кода: PriMER в названии записи не выводил запись PRIMER.
if (!empty($_POST["query_check"])) { $args = array( 'posts_per_page' => 2, 'post_type' => 'check', 'exact' => true, 's' => $query_check ); $posts = new WP_Query( $args ); if( ( $posts->have_posts() ) ){ echo '<p class="yescode">'.$successmessage.'</p>'; }else{ echo '<p class="nocode">'.$notfoundcode.'</p>'; } } |
if (!empty($_POST["query_check"])) { $args = array( 'posts_per_page' => 2, 'post_type' => 'check', 'exact' => true, 's' => $query_check ); $posts = new WP_Query( $args ); if( ( $posts->have_posts() ) ){ echo '<p class="yescode">'.$successmessage.'</p>'; }else{ echo '<p class="nocode">'.$notfoundcode.'</p>'; } }
В query_check - передаю код(он может быть вида: Primer, PriMER, PRImer123 и тд). А сам код вбивается в Название записи.
Дополнительно:
вроде как, если обернуть в кавычки "ваШзапрос" будет работать
Ответы:
if (!empty($_POST["query_check"])) { $args = array( 'posts_per_page' => 2, 'post_type' => 'check', 's' => $query_check, 'sentence' => true ); $posts = new WP_Query( $args ); if ( $posts->have_posts() ) { echo '<p class="yescode">'.$successmessage.'</p>'; } else { echo '<p class="nocode">'.$notfoundcode.'</p>'; } } |
if (!empty($_POST["query_check"])) { $args = array( 'posts_per_page' => 2, 'post_type' => 'check', 's' => $query_check, 'sentence' => true ); $posts = new WP_Query( $args ); if ( $posts->have_posts() ) { echo '<p class="yescode">'.$successmessage.'</p>'; } else { echo '<p class="nocode">'.$notfoundcode.'</p>'; } }
Опишите проблему, и специалист поможет с настройкой, исправлением ошибки или доработкой сайта. Подберём понятный план работ без лишней переписки.
Пока нет других ответов. Будьте первым, кто поможет автору.
Ответить на вопрос
Стандартный поиск WordPress через параметр
sзависит от сравнения в MySQL, а в типичных кодировках/collation вродеutf8mb4_unicode_ciсравнение регистронезависимое. Поэтому запросPriMERможет найтиPRIMER. Параметрыexactиsentenceне решают чувствительность к регистру.Если задача — проверить код, который хранится в заголовке записи, лучше не использовать общий поиск WordPress. Сделайте точный запрос по
post_titleс бинарным сравнением:global $wpdb; $query_check = isset($_POST['query_check']) ? sanitize_text_field(wp_unslash($_POST['query_check'])) : ''; $post_id = $wpdb->get_var( $wpdb->prepare( "SELECT ID FROM {$wpdb->posts} WHERE post_type = %s AND post_status = 'publish' AND BINARY post_title = %s LIMIT 1", 'check', $query_check ) ); if ($post_id) { echo '<p class="yescode">Код найден</p>'; } else { echo '<p class="nocode">Код не найден</p>'; }
Для таких кодов ещё лучше хранить значение не в заголовке, а в post meta с отдельным уникальным ключом или в собственной таблице. Заголовок записи предназначен для контента, а не для строгих проверок промокодов/серийных номеров. Если кодов много, добавьте индекс и проверяйте уникальность при сохранении, иначе поиск будет медленным.