acf/schema/post_field_objects — фильтр объектов полей

Обзор

Фильтрует объекты полей перед обработкой записи.

Описание

Этот фильтр позволяет вам изменять или заменять объекты полей, которые обрабатываются для вывода JSON-LD в записях. Верните ненулевое значение, чтобы переопределить стандартное получение полей через get_field_objects().

Это полезно для добавления собственных источников данных, исключения определенных полей или предоставления данных полей из альтернативных источников.

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

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

Параметры

apply_filters( 'acf/schema/post_field_objects', $field_objects, $post, $post_type );
  • $field_objects (array|null) Массив объектов полей или null, чтобы использовать стандартное получение
  • $post (WP_Post) Объект записи
  • $post_type (string) Имя типа записи

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

(array|null) Измененный массив объектов полей или null, чтобы использовать поведение по умолчанию.

Пример

В этом примере добавляется виртуальное поле для вычисляемых данных.

/**
 * Добавить вычисляемое поле в вывод JSON-LD.
 *
 * @param array|null $field_objects Массив объектов полей.
 * @param WP_Post    $post          Объект записи.
 * @param string     $post_type     Тип записи.
 * @return array Измененные объекты полей.
 */
function my_acf_schema_add_calculated_field( $field_objects, $post, $post_type ) {
    // Получить стандартные объекты полей, если они еще не заданы
    if ( null === $field_objects ) {
        $field_objects = get_field_objects( $post->ID, false );
    }

    if ( ! is_array( $field_objects ) ) {
        $field_objects = array();
    }

    // Добавить вычисляемое общее время для рецептов
    if ( $post_type === 'recipe' ) {
        $prep_time = get_field( 'prep_time', $post->ID );
        $cook_time = get_field( 'cook_time', $post->ID );

        $field_objects['total_time'] = array(
            'value'           => $prep_time + $cook_time,
            'schema_property' => 'totalTime',
            'type'            => 'number',
        );
    }

    return $field_objects;
}
add_filter( 'acf/schema/post_field_objects', 'my_acf_schema_add_calculated_field', 10, 3 );

В этом примере исключаются определенные поля из вывода JSON-LD.

/**
 * Исключить внутренние поля из вывода JSON-LD.
 *
 * @param array|null $field_objects Массив объектов полей.
 * @param WP_Post    $post          Объект записи.
 * @param string     $post_type     Тип записи.
 * @return array Измененные объекты полей.
 */
function my_acf_schema_exclude_internal_fields( $field_objects, $post, $post_type ) {
    if ( null === $field_objects ) {
        $field_objects = get_field_objects( $post->ID, false );
    }

    if ( ! is_array( $field_objects ) ) {
        return $field_objects;
    }

    // Удалить поля, начинающиеся с подчеркивания
    foreach ( $field_objects as $key => $field ) {
        if ( strpos( $key, '_' ) === 0 ) {
            unset( $field_objects[ $key ] );
        }
    }

    return $field_objects;
}
add_filter( 'acf/schema/post_field_objects', 'my_acf_schema_exclude_internal_fields', 10, 3 );

Обновлено: 02.06.2026