Как добавить собственный префикс ко всем подписям к изображениям постов WordPress?
Хочу добавить собственный префикс ко всем подписям к изображениям постов WordPress.
Вставляю в файл functions.php активной темы такой код
add_filter( 'image_add_caption_text', 'add_custom_prefix', 10, 2 ); function add_custom_prefix( $caption, $id ) { $prefix = 'Фото: '; return $prefix . $caption; } |
add_filter( 'image_add_caption_text', 'add_custom_prefix', 10, 2 ); function add_custom_prefix( $caption, $id ) { $prefix = 'Фото: '; return $prefix . $caption; }
Но префикс не добавляется.
Подскажите в чем ошибка?
И какое есть решение для этой задачи?
Дополнительно
Refguser @Refguser Делаю ИМ и другие решения Думаю как-то так:
add_filter( 'image_add_caption_text', 'add_custom_prefix', 10, 2 ); function add_custom_prefix( $caption, $id ) { $prefix = 'Фото: '; $caption = $prefix . $caption; return $caption; } |
add_filter( 'image_add_caption_text', 'add_custom_prefix', 10, 2 ); function add_custom_prefix( $caption, $id ) { $prefix = 'Фото: '; $caption = $prefix . $caption; return $caption; }
UPD Проверено - это не работает при вставке в гутенберге, но работает при вставке в классическом редакторе. Т.е. генерируется шорткод
- Refguser Спасибо за отклик. Да, я так тоже пробовал и не работает в гутенберге.
Подскажите, а в гутенберге, как это можно реализовать? - Alivgon, не знаю. Я вообще подписями не пользуюсь.
Но я даже не понимаю к чему применять этот фильтр - какая проблема сразу дописать этот "префикс" при вставке изображения? Всё равно это фильтр работает только на моменте вставки, а далее если редактировать контент/картинку уже ничего не меняется.Если нужно отредактировать массово уже существующие вставки, то для этого уже другие решения.
Опишите проблему, и специалист поможет с настройкой, исправлением ошибки или доработкой сайта. Подберём понятный план работ без лишней переписки.
Пока нет других ответов. Будьте первым, кто поможет автору.
Ответить на вопрос
image_add_caption_textне решает задачу для Gutenberg так, как ожидается. Этот фильтр относится к моменту вставки подписи в старом механизме редактора и не является универсальным фильтром вывода подписей на сайте. В блоковом редакторе подпись хранится внутри HTML блокаcore/image, поэтому уже сохранённые подписи он не изменит.Если нужно добавить префикс только при выводе на фронте, безопаснее обработать рендер блока изображения:
add_filter('render_block', function ($block_content, $block) { if (($block['blockName'] ?? '') !== 'core/image') { return $block_content; } if (strpos($block_content, 'wp-element-caption') === false) { return $block_content; } if (strpos($block_content, 'Фото:') !== false) { return $block_content; } return preg_replace( '/(<figcaption[^>]*>)/', '$1Фото: ', $block_content, 1 ); }, 10, 2);
Идея такая: мы не переписываем контент в базе, а меняем HTML только на этапе вывода. Это обратимо: убрали фильтр — подписи снова отображаются как раньше. В коде важно не добавлять префикс повторно, иначе после нескольких обработок можно получить «Фото: Фото: ...».
используется фильтрimg_caption_shortcode.render_blockили кастомная обработка конкретного блока.Если префикс нужен только визуально, можно рассмотреть CSS через
::before, но это не всегда хорошо для доступности и копирования текста. PHP-фильтр вывода обычно практичнее.