acf/schema/format_value/pre

Last updated Mar 31, 2026

Overview

Filter a field value before default formatting is applied.

Description

This filter allows you to modify or replace field values before ACF applies its default JSON-LD formatting. Return a non-null value to bypass the default formatting entirely.

Changelog

  • Added in version 6.8.0

Parameters

apply_filters( 'acf/schema/format_value/pre', $pre_value, $value, $field_object, $field_type );
  • $pre_value (mixed) Pre-formatted value, or null to use default formatting
  • $value (mixed) The raw field value
  • $field_object (array) The field object with settings
  • $field_type (string) The field type name

Return

(mixed|null) The pre-formatted value, or null to use default formatting.

Example

This example provides custom duration formatting.

/**
 * Custom ISO 8601 duration formatting.
 *
 * @param mixed  $pre_value    Pre-formatted value or null.
 * @param mixed  $value        The raw value.
 * @param array  $field_object The field object.
 * @param string $field_type   The field type.
 * @return mixed Pre-formatted value or null.
 */
function my_acf_schema_duration_format( $pre_value, $value, $field_object, $field_type ) {
    $property = $field_object['schema_property'] ?? '';

    // Handle duration properties
    $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; // Use default formatting
}
add_filter( 'acf/schema/format_value/pre', 'my_acf_schema_duration_format', 10, 4 );

This example handles custom date formatting.

/**
 * Custom date formatting for events.
 *
 * @param mixed  $pre_value    Pre-formatted value or null.
 * @param mixed  $value        The raw value.
 * @param array  $field_object The field object.
 * @param string $field_type   The field type.
 * @return mixed Pre-formatted value or null.
 */
function my_acf_schema_event_dates( $pre_value, $value, $field_object, $field_type ) {
    $property = $field_object['schema_property'] ?? '';

    // Format event dates with timezone
    if ( in_array( $property, array( 'startDate', 'endDate' ), true ) && $value ) {
        $timestamp = strtotime( $value );
        if ( $timestamp ) {
            return date( 'c', $timestamp ); // ISO 8601 with timezone
        }
    }

    return $pre_value;
}
add_filter( 'acf/schema/format_value/pre', 'my_acf_schema_event_dates', 10, 4 );
Supercharge Your Website With Premium Features Using ACF PRO

Speed up your workflow and unlock features to better develop websites using ACF Blocks and Options Pages, with the Flexible Content, Repeater, Clone, Gallery Fields & More.

Explore Features View Pricing

PRO Features
ACF Blocks
Options Pages
PRO Fields
Repeater
Flexible Content
Gallery
Clone

Related