Хук posts_pre_query в WPFTS
Хук posts_pre_query в WordPress — это фильтр, который позволяет изменять результаты запроса WP_Query перед тем, как они будут возвращены. WPFTS использует этот хук в режиме разделенного запроса (split_the_query) для получения полных данных постов на основании их ID и релевантности, полученных в первом запросе.
Что делает WPFTS при вызове posts_pre_query:
-
Проверка использования индексного поиска и режима разделенного запроса: Плагин проверяет, включен ли индексный поиск и используется ли разделенный запрос ($wpq->wpftsi_session[‘use_indexed_search’] и $wpq->wpftsi_session[‘is_split_query’]).
-
Получение полных данных постов: Если условия выполнены, WPFTS извлекает из базы данных полные данные постов, ID которых были получены в первом запросе. Это делается с помощью отдельного SQL-запроса к таблице wp_posts. Плагин также добавляет поле relev (релевантность) к каждому объекту поста. Важно отметить, что WPFTS использует прямой SQL-запрос для получения данных, а не стандартную функцию get_posts(), чтобы избежать кеширования постов без информации о релевантности.
-
Сортировка постов: WPFTS сортирует полученные посты в соответствии с порядком, определенным в первом запросе, чтобы сохранить сортировку по релевантности.
Важные функции, задействованные в обработке posts_pre_query:
-
WPFTS_Search::index_posts_pre_query()
-
WPFTS_DB::get_results() (для выполнения SQL-запроса)
-
wpq_set_found_posts (косвенно, для установки found_posts и max_num_pages)
Как это использовать в разработке аддонов:
Разработчикам аддонов важно понимать, как WPFTS использует posts_pre_query в режиме разделенного запроса. Если ваш аддон также модифицирует этот фильтр, убедитесь, что ваша логика не конфликтует с WPFTS. В частности, учитывайте, что в этом режиме WPFTS полностью заменяет стандартный массив постов, возвращаемый WP_Query, на свой собственный.
Дополнительные замечания:
-
WPFTS использует posts_pre_query только в режиме разделенного запроса.
-
Разделенный запрос используется для оптимизации производительности при большом количестве результатов поиска.
-
WPFTS сортирует посты по релевантности и восстанавливает оригинальный порядок из первого запроса.