С ACF 6.2.5 шорткод по умолчанию прогоняет значение поля через wp_kses. Небезопасный HTML (скрипты, iframe и подобное) вырезается. Это security release: закрыли сценарий, когда contributor и выше без unfiltered_html мог подсунуть вредоносный HTML в meta вне ACF и вывести его через шорткод.
Если вы через шорткод выводите textarea/WYSIWYG с iframe (подкасты, карты, виджеты) или скриптами – после обновления вывод может «сломаться». Ниже: что именно изменилось, как увидеть затронутые поля и как точечно разрешить unsafe HTML, не отключая защиту глобально.
Что ломается на практике
Шорткод ACF раньше мог отдать поле «как есть». С 6.2.5 значение проходит kses WordPress: безопасные теги (картинки, таблицы и т.п.) остаются, <script> и <iframe> по умолчанию уходят.
Пример привычного вывода:
Если в поле лежал embed-iframe, на фронте он исчезнет, а в админке ACF покажет уведомление со списком затронутых полей – удобно понять, что чинить.
the_field() и the_sub_field()
В 6.2.5 ACF уже детектит, когда экранированное значение отличается от «сырого», и показывает предупреждение для the_field() / the_sub_field(). С 6.2.7 (анонс на февраль 2024) то же экранирование по умолчанию включается и для этих функций: HTML не запрещают целиком, а оставляют только безопасный набор kses.
Список разрешённых тегов и атрибутов – в kses.php ядра WordPress. iframe и script туда по умолчанию не входят.
Точечно разрешить unsafe HTML
Если пользователям с ролью contributor и выше вы доверяете (или HTML кладёте только вы сами), есть два фильтра. Лучше ограничивать по ключу/имени поля, а не возвращать true для всего сайта.
acf/shortcode/allow_unsafe_html– для шорткодаacf/the_field/allow_unsafe_html– дляthe_field/the_sub_field
Сигнатура фильтра шорткода:
apply_filters( 'acf/shortcode/allow_unsafe_html', false, $attributes, $field_type, $field_object );
Пример: поле podcast_iframe через шорткод должно отдавать iframe:
add_filter( 'acf/shortcode/allow_unsafe_html', function ( $allowed, $atts ) {
if ( isset( $atts['field'] ) && $atts['field'] === 'podcast_iframe' ) {
return true;
}
return $allowed;
}, 10, 2 );
Сигнатура для the_field:
apply_filters( 'acf/the_field/allow_unsafe_html', false, $selector, $post_id, $field_type, $field_object );
Пример для поля-карты Google:
add_filter( 'acf/the_field/allow_unsafe_html', function ( $allowed, $selector ) {
if ( $selector === 'google_maps_iframe' ) {
return true;
}
return $allowed;
}, 10, 2 );
Включить новое поведение заранее
Если небезопасный HTML в ACF-полях не храните (или сами экранируете вывод), можно сразу включить жёсткий режим для the_field:
add_filter( 'acf/the_field/escape_html_optin', '__return_true' );
Небезопасный HTML будет срезаться сразу, а в админке появится сообщение, когда это сработало.
Что сделать после обновления
- Обновите ACF до 6.2.5+ и зайдите в админку – посмотрите предупреждения по полям.
- Пройдитесь по страницам, где выводите embeds через шорткод или
the_field(). - Для нужных ключей полей добавьте allow_unsafe_html-фильтры; остальное оставьте под kses.
- По возможности вынесите embeds в отдельные поля и не давайте неадминам править HTML вручную.