Фильтр acf/schema/format_value/pre

Обзор

Фильтрует значение поля перед применением стандартного форматирования.

Описание

Этот фильтр позволяет изменять или заменять значения полей до того, как ACF применит стандартное форматирование JSON-LD. Верните значение, отличное от null, чтобы полностью обойти стандартное форматирование.

Журнал изменений

  • Добавлено в версии 6.8.0

Параметры

apply_filters( 'acf/schema/format_value/pre', $pre_value, $value, $field_object, $field_type );
  • $pre_value (mixed) Предварительно отформатированное значение или null, чтобы использовать форматирование по умолчанию
  • $value (mixed) Исходное значение поля
  • $field_object (array) Объект поля с настройками
  • $field_type (string) Название типа поля

Возвращаемое значение

(mixed|null) Предварительно отформатированное значение или null, чтобы использовать форматирование по умолчанию.

Пример

В этом примере показано пользовательское форматирование длительности.

/**
 * Пользовательское форматирование длительности ISO 8601.
 *
 * @param mixed  $pre_value    Предварительно отформатированное значение или null.
 * @param mixed  $value        Исходное значение.
 * @param array  $field_object Объект поля.
 * @param string $field_type   Тип поля.
 * @return mixed Предварительно отформатированное значение или null.
 */
function my_acf_schema_duration_format( $pre_value, $value, $field_object, $field_type ) {
    $property = $field_object['schema_property'] ?? '';

    // Обработка свойств длительности
    $duration_properties = array( 'prepTime', 'cookTime', 'totalTime', 'duration' );

    if ( in_array( $property, $duration_properties, true ) && is_numeric( $value ) ) {
        $hours   = floor( $value / 60 );
        $minutes = $value % 60;

        if ( $hours > 0 && $minutes > 0 ) {
            return sprintf( 'PT%dH%dM', $hours, $minutes );
        } elseif ( $hours > 0 ) {
            return sprintf( 'PT%dH', $hours );
        } else {
            return sprintf( 'PT%dM', $minutes );
        }
    }

    return $pre_value; // Использовать форматирование по умолчанию
}
add_filter( 'acf/schema/format_value/pre', 'my_acf_schema_duration_format', 10, 4 );

В этом примере обрабатывается пользовательское форматирование дат.

/**
 * Пользовательское форматирование дат для событий.
 *
 * @param mixed  $pre_value    Предварительно отформатированное значение или null.
 * @param mixed  $value        Исходное значение.
 * @param array  $field_object Объект поля.
 * @param string $field_type   Тип поля.
 * @return mixed Предварительно отформатированное значение или null.
 */
function my_acf_schema_event_dates( $pre_value, $value, $field_object, $field_type ) {
    $property = $field_object['schema_property'] ?? '';

    // Форматирование дат событий с часовым поясом
    if ( in_array( $property, array( 'startDate', 'endDate' ), true ) && $value ) {
        $timestamp = strtotime( $value );
        if ( $timestamp ) {
            return date( 'c', $timestamp ); // ISO 8601 с часовым поясом
        }
    }

    return $pre_value;
}
add_filter( 'acf/schema/format_value/pre', 'my_acf_schema_event_dates', 10, 4 );

Обновлено: 02.06.2026