Страница вывода результатов поиска:
<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;
}