[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Не совпадают регистры при выводе текста
Sega1821
Здравствуйте, пытаюсь сделать поиск в wordpress, в целом работает хорошо, но есть проблема, если я ищу слово с большой буквы, а в искомом тексте она маленькая, то выводятся первые 50 слов вместо искомой фразы. Если регистр совпадает, то всё нормально, выводится нужный отрывок текста

Страница вывода результатов поиска:

<div class="textforsearch">
<?php
// Получаем содержимое записи
$content = get_the_content();

// Получаем поисковой запрос
$search_query = get_search_query();

// Используем регулярное выражение для извлечения содержимого тега [vc_column_text]
$pattern_vc_column = '/\[vc_column_text[^\]]*\](.*?)\[\/vc_column_text\]/is';

// Проверяем каждое совпадение
preg_match_all($pattern_vc_column, $content, $matches_vc_column, PREG_SET_ORDER);

// Массив для отслеживания уже выведенных строк
$displayed_lines = array();

// Перебираем найденные совпадения в [vc_column_text]
foreach ($matches_vc_column as $match_vc_column) {
// Разбиваем текст из [vc_column_text] на строки
$lines = explode("\n", strip_tags($match_vc_column[1]));

// Перебираем строки
foreach ($lines as $line) {
// Если найденный текст содержит ключевое слово и еще не был выведен, выводим его
if (stripos($line, $search_query) !== false && !in_array($line, $displayed_lines)) {
echo wpautop($line);
// Добавляем строку в массив выведенных
$displayed_lines[] = $line;
}
}
}


// Пробуем старый метод поиска в атрибуте text=""
$pattern_text_attribute = '/\btext="([^"]*'. preg_quote($search_query, '/') .'[^"]*)"/i';
if (preg_match_all($pattern_text_attribute, $content, $matches_text_attribute)) {
// Перебираем найденные совпадения в text=""
foreach ($matches_text_attribute[1] as $match_text_attribute) {
// Если найденный текст еще не был выведен, выводим его
if (!in_array($match_text_attribute, $displayed_lines)) {
echo wpautop($match_text_attribute);
// Добавляем строку в массив выведенных
$displayed_lines[] = $match_text_attribute;
}
}
}


// Если нет совпадений в [vc_column_text] и text="", выводим обычный фрагмент текста
if (empty($matches_vc_column) && empty($matches_text_attribute[1])) {
echo wpautop(wp_trim_words(strip_tags($content), 50)); // Ограничиваем вывод до 50 слов
}
?>



</div>



Так же есть ещё одна функция, возможно проблема и в ней (functions.php)


function cf_search_where($where) {
global $wpdb;

if (is_search()) {
$search_query = get_search_query();

// Добавляем символы % вокруг всего поискового запроса
$modified_query = '%' . esc_sql($wpdb->esc_like($search_query)) . '%';

// Добавляем условие поиска для класса .opisus в поле post_content
$where = preg_replace(
"/\(\s*" . $wpdb->posts . ".post_title\s+LIKE\s*(\'[^\']+\')\s*\)/",
"(" .
$wpdb->posts . ".post_title LIKE '$modified_query') OR (" .
$wpdb->postmeta . ".meta_value LIKE '$modified_query') OR ((" .
$wpdb->posts . ".post_content LIKE '%$modified_query%' OR " .
$wpdb->posts . ".ID IN (SELECT post_id FROM " .
$wpdb->postmeta . " WHERE meta_key = 'class' AND meta_value LIKE '%opisus%'))) OR (" .
$wpdb->posts . ".post_content LIKE '%$search_query%' AND " .
$wpdb->posts . ".post_content LIKE '%profil%')",
$where
);
}

return $where;
}
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.