Как сделать Поиск WordPress с учетом регистра?

Ссылка скопирована
1 ответ

Добрый день, как сделать с помощью вывода записей 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 и тд). А сам код вбивается в Название записи.

Дополнительно:

вроде как, если обернуть в кавычки "ваШзапрос" будет работать

  • Не, не работает
  • У вас не определены переменные $query_check, $successmessage и $notfoundcode. И в аргументах нужно еще указать sentence => true, если я правильно понял вашу задачу
  • Ответы:

    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>'; } }

    Нужно решить такую задачу?

    Опишите проблему, и специалист поможет с настройкой, исправлением ошибки или доработкой сайта. Подберём понятный план работ без лишней переписки.

    Заказать помощь
    Лучший ответ
    1
    Редакция Security Ответ

    Стандартный поиск 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>';
    }

    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 с отдельным уникальным ключом или в собственной таблице. Заголовок записи предназначен для контента, а не для строгих проверок промокодов/серийных номеров. Если кодов много, добавьте индекс и проверяйте уникальность при сохранении, иначе поиск будет медленным.

    Другие ответы (0)

    Пока нет других ответов. Будьте первым, кто поможет автору.

    Ответить на вопрос

    комментарий

    Ваш адрес email не будет опубликован. Обязательные поля помечены *

    Вам также может быть интересно