Хук posts_pre_query в WPFTS

Хук posts_pre_query в WordPress — это фильтр, который позволяет изменять результаты запроса WP_Query перед тем, как они будут возвращены. WPFTS использует этот хук в режиме разделенного запроса (split_the_query) для получения полных данных постов на основании их ID и релевантности, полученных в первом запросе.

Что делает WPFTS при вызове posts_pre_query:

  1. Проверка использования индексного поиска и режима разделенного запроса: Плагин проверяет, включен ли индексный поиск и используется ли разделенный запрос ($wpq->wpftsi_session[‘use_indexed_search’] и $wpq->wpftsi_session[‘is_split_query’]).

  2. Получение полных данных постов: Если условия выполнены, WPFTS извлекает из базы данных полные данные постов, ID которых были получены в первом запросе. Это делается с помощью отдельного SQL-запроса к таблице wp_posts. Плагин также добавляет поле relev (релевантность) к каждому объекту поста. Важно отметить, что WPFTS использует прямой SQL-запрос для получения данных, а не стандартную функцию get_posts(), чтобы избежать кеширования постов без информации о релевантности.

  3. Сортировка постов: 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 сортирует посты по релевантности и восстанавливает оригинальный порядок из первого запроса.