Хук pre_get_posts в WPFTS
Хук pre_get_posts — это один из самых важных фильтров в WordPress, который позволяет модифицировать параметры запроса WP_Query перед его выполнением. WPFTS использует этот хук для интеграции своего поискового движка с WordPress и для применения настроек поиска, определенных в пресетах или переданных напрямую через параметры запроса.
Что делает WPFTS при вызове pre_get_posts:
-
Проверка и установка флага wpfts_disable: Плагин проверяет, был ли установлен флаг wpfts_disable в параметрах запроса или в настройках плагина. Этот флаг позволяет полностью отключить поиск WPFTS и использовать стандартный поиск WordPress.
-
Определение типа поиска и пресета: Если поиск WPFTS не отключен, плагин определяет тип поиска (например, wpmainsearch_admin, wpmainsearch_frontend, wpblockquery) и выбирает соответствующий пресет настроек.
-
Применение настроек пресета и параметров запроса: WPFTS применяет настройки выбранного пресета к объекту $wpq, а также обрабатывает специфические параметры запроса WPFTS, такие как word_logic, orderby, order, display_attachments, limit_mimetypes, cluster_weights, wpfts_nocache и deeper_search. Эти параметры позволяют гибко настраивать поиск.
-
Обработка результатов URL для виджетов: Если поиск выполняется через виджет, WPFTS обрабатывает параметр results_url и модифицирует объект $wpq соответствующим образом, чтобы результаты поиска отображались на правильной странице.
-
Вызов фильтров: WPFTS вызывает фильтры wpfts_pre_set_file_search (устаревший) и wpfts_pre_get_posts, которые позволяют разработчикам аддонов модифицировать параметры запроса.
-
Подготовка SQL-запроса: Плагин подготавливает части SQL-запроса, необходимые для выполнения поиска с учетом настроек и параметров. Эти части запроса затем используются в других фильтрах, таких как posts_search, posts_join, posts_orderby и т.д.
-
Логирование запроса: Если логирование запросов включено, 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 и позволяет разработчикам гибко настраивать поведение поиска.