wpfts_index_post (Filter)
Фильтр wpfts_index_post
предоставляет разработчикам мощный инструмент для модификации данных, которые будут проиндексированы плагином WP Fast Total Search
. Он вызывается после того, как плагин извлек данные из поста (заголовок, контент, отрывок и другие поля, определенные правилами индексации), но перед тем, как эти данные будут фактически добавлены в поисковый индекс. Это позволяет добавлять, изменять или удалять данные перед индексацией.
Когда используется
Этот хук идеально подходит для следующих сценариев:
-
Добавление данных из произвольных полей (custom fields) в индекс.
-
Модификация контента перед индексацией (например, удаление HTML-тегов, форматирование текста).
-
Добавление данных из связанных таксономий или других постов.
-
Исключение определенных частей контента из индекса.
Аргументы
-
$chunks
(массив): Массив данных, подготовленных для индексации. Ключи массива представляют собой названия кластеров (например,post_title
,post_content
,post_excerpt
, а также любые другие кластеры, определенные правилами индексации). Значения массива - это строки или массивы строк, содержащие данные для индексации. Важно: Этот аргумент передается по ссылке (&), поэтому любые изменения, внесенные в массив$chunks
внутри функции-обработчика, будут отражены в данных, которые будут проиндексированы. -
$post
(объектWP_Post
): Объект WordPress, представляющий текущий индексируемый пост. Это дает доступ ко всем свойствам поста, таким как ID, заголовок, дата публикации и т.д. Можно использовать этот объект для получения дополнительных данных, связанных с постом, и добавления их в$chunks
. -
$is_refresh_raw_cache
(bool): Флаг, указывающий, было ли принудительно обновление кеша данных поста. true, если кеш был обновлен, false в противном случае. Этот параметр редко используется разработчиками аддонов.
Возвращаемое значение
$chunks
(массив): Модифицированный массив данных для индексации. Функция-обработчик должна вернуть массив$chunks
, даже если в него не были внесены изменения.
Пример
/**
* Добавляет значение произвольного поля "my_custom_field" в индекс.
*/
add_filter('wpfts_index_post', 'my_wpfts_index_post_handler', 10, 3);
function my_wpfts_index_post_handler($chunks, $post, $is_refresh_raw_cache) {
// Получаем значение произвольного поля.
$custom_field_value = get_post_meta($post->ID, 'my_custom_field', true);
// Добавляем значение в новый кластер "my_custom_cluster".
if ($custom_field_value) {
if (!is_array($custom_field_value)) {
$custom_field_value = array($custom_field_value);
}
$chunks['my_custom_cluster'] = $custom_field_value;
}
// Возвращаем модифицированный массив.
return $chunks;
}
Пример 2 (работа с массивами)
add_filter('wpfts_index_post', 'add_multiple_meta_fields', 10, 3);
function add_multiple_meta_fields($chunks, $post, $is_refresh_raw_cache)
{
$meta_fields = array('meta_field_1', 'meta_field_2', 'meta_field_3');
$meta_values = array();
foreach ($meta_fields as $field) {
$value = get_post_meta($post->ID, $field, true);
if ($value) {
$meta_values[$field] = is_array($value) ? implode(' ', $value) : $value; // Объединяем значения массива в строку
}
}
if (count($meta_values) > 0) {
if (isset($chunks['additional_meta'])) {
$chunks['additional_meta'] = array_merge($chunks['additional_meta'], $meta_values);
} else {
$chunks['additional_meta'] = $meta_values;
}
}
return $chunks;
}
Важные замечания
-
Изменения, внесенные в
$chunks
, повлияют на результаты поиска. Убедитесь, что вы добавляете только релевантные данные. -
Если вы добавляете данные в новый кластер, убедитесь, что вы также настроили вес для этого кластера в настройках плагина или через фильтр
wpfts_cluster_weights
, чтобы он учитывался при расчете релевантности.
Этот хук является одним из самых эффективных способов расширения функциональности WP Fast Total Search
. Используйте его с умом, и вы сможете настроить поиск на своем сайте максимально точно.