Хук pre_get_posts в WPFTS

Хук pre_get_posts — это один из самых важных фильтров в WordPress, который позволяет модифицировать параметры запроса WP_Query перед его выполнением. WPFTS использует этот хук для интеграции своего поискового движка с WordPress и для применения настроек поиска, определенных в пресетах или переданных напрямую через параметры запроса.

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

  1. Проверка и установка флага wpfts_disable: Плагин проверяет, был ли установлен флаг wpfts_disable в параметрах запроса или в настройках плагина. Этот флаг позволяет полностью отключить поиск WPFTS и использовать стандартный поиск WordPress.

  2. Определение типа поиска и пресета: Если поиск WPFTS не отключен, плагин определяет тип поиска (например, wpmainsearch_admin, wpmainsearch_frontend, wpblockquery) и выбирает соответствующий пресет настроек.

  3. Применение настроек пресета и параметров запроса: WPFTS применяет настройки выбранного пресета к объекту $wpq, а также обрабатывает специфические параметры запроса WPFTS, такие как word_logic, orderby, order, display_attachments, limit_mimetypes, cluster_weights, wpfts_nocache и deeper_search. Эти параметры позволяют гибко настраивать поиск.

  4. Обработка результатов URL для виджетов: Если поиск выполняется через виджет, WPFTS обрабатывает параметр results_url и модифицирует объект $wpq соответствующим образом, чтобы результаты поиска отображались на правильной странице.

  5. Вызов фильтров: WPFTS вызывает фильтры wpfts_pre_set_file_search (устаревший) и wpfts_pre_get_posts, которые позволяют разработчикам аддонов модифицировать параметры запроса.

  6. Подготовка SQL-запроса: Плагин подготавливает части SQL-запроса, необходимые для выполнения поиска с учетом настроек и параметров. Эти части запроса затем используются в других фильтрах, таких как posts_search, posts_join, posts_orderby и т.д.

  7. Логирование запроса: Если логирование запросов включено, WPFTS записывает информацию о запросе в базу данных.

Важные функции, задействованные в обработке pre_get_posts:

  • WPFTS_Core::get_option()

  • WPFTS_Core::GetPresetBySearchType()

  • WPFTS_Core::GetPresetData()

  • WPFTS_Core::GetWidgetPresets()

  • WPFTS_Search::sql_parts()

  • WPFTS_QueryLog::AfterPreGetPosts()

  • apply_filters(‘wpfts_cluster_weights’, …)

  • do_action_ref_array(‘wpfts_pre_get_posts’, …)

  • do_action_ref_array(‘wpfts_pre_set_file_search’, …)

  • WP_Query::set()

  • WP_Query::get()

Как это использовать в разработке аддонов:

Разработчики аддонов могут использовать фильтр wpfts_pre_get_posts для модификации параметров поискового запроса перед его выполнением. Это дает возможность гибко интегрировать функциональность аддона с поиском WPFTS.

Дополнительные замечания:

  • Хук pre_get_posts вызывается для всех запросов WP_Query на сайте, но WPFTS обрабатывает его только для запросов, связанных с поиском.

  • WPFTS использует сессии WP_Query для хранения информации о текущем запросе.

  • Обработка параметров запроса и настроек пресета происходит в методе WPFTS_Search::index_pre_get_posts().

  • Подготовка SQL-запроса выполняется в методе WPFTS_Search::sql_parts().

Хук pre_get_posts является ключевым для интеграции WPFTS с WordPress и позволяет разработчикам гибко настраивать поведение поиска.