wpfts_index_post (Filter)

Фильтр wpfts_index_post предоставляет разработчикам мощный инструмент для модификации данных, которые будут проиндексированы плагином WP Fast Total Search. Он вызывается после того, как плагин извлек данные из поста (заголовок, контент, отрывок и другие поля, определенные правилами индексации), но перед тем, как эти данные будут фактически добавлены в поисковый индекс. Это позволяет добавлять, изменять или удалять данные перед индексацией.

Когда используется

Этот хук идеально подходит для следующих сценариев:

  • Добавление данных из произвольных полей (custom fields) в индекс.

  • Модификация контента перед индексацией (например, удаление HTML-тегов, форматирование текста).

  • Добавление данных из связанных таксономий или других постов.

  • Исключение определенных частей контента из индекса.

Аргументы

  • $chunks (массив): Массив данных, подготовленных для индексации. Ключи массива представляют собой названия кластеров (например, post_titlepost_contentpost_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. Используйте его с умом, и вы сможете настроить поиск на своем сайте максимально точно.