Задать вопрос
@Smirator

Почему шорткод в поле acf превращается в тег?

Приветствую всех!
На сайте есть поле ACF, в которое я добавлю текст и изображение. Изображение выводится шорткодом: [image id="1"].
После сохранения страницы шорткод "превращается" в тег.

То-есть, я занес: [image id="1"], страница обновилась и в поле, куда занес отображается:
<img class="img-fluid" loading="lazy" src ="https://test.ru/wp-content/uploads/2023/03/summer-service.jpeg" srcset="https://test.ru/wp-content/uploads/2023/03/summer-service.jpeg 719w, https://test.ru/wp-content/uploads/2023/03/summer-service-216x300.jpeg 216w" sizes="(max-width: 719px) 100vw, 719px" alt="Сотрудник "/>


Отсечены самые банальные вещи:
1. Поле точно сохраняется, если добавить любой текст рядом, то после сохранения он остается.
2. Вывод поля через pre возвращает текст и уже готовое изображение.
3. Поле ACF - текстовая область (не редактор).

Я хочу, чтобы в поле оставался шорткод, не становясь тегом.
Что пробовал:
if (!empty($more_advantages)):
	echo do_shortcode($more_advantages); // Преобразует шорткод в HTML
endif;


add_filter( 'acf/shortcode/allow_unsafe_html', '__return_true' );
add_filter( 'acf/the_field/allow_unsafe_html', '__return_true' );


и такое тоже:
add_filter('acf/update_value/name=your_field_name', 'save_shortcode_as_text', 10, 3);

function save_shortcode_as_text($value, $post_id, $field) {
    return esc_textarea($value); // экранирует значение чтобы сохранить текстом, без выполнения
}
  • Вопрос задан
  • 67 просмотров
Подписаться 1 Средний 1 комментарий
Пригласить эксперта
Ответы на вопрос 1
avgustov
@avgustov
Нужно обработать значение поля ACF через соответствующий фильтр. Вместо esc_textarea использовать htmlspecialchars

add_filter('acf/update_value/name=your_field_name', 'save_shortcode_as_text', 10, 3);
function save_shortcode_as_text($value, $post_id, $field) {
    return htmlspecialchars($value, ENT_QUOTES);
}


При выводе значения
if (!empty($more_advantages)):
    echo htmlspecialchars_decode($more_advantages, ENT_QUOTES);
endif;


Функция htmlspecialchars_decode() используется для декодирования строк, которые были закодированы с помощью htmlspecialchars(). Она возвращает строку, в которой HTML-сущности, преобразуются обратно в их оригинальные символы.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы