Как добавить собственный префикс ко всем подписям к изображениям постов WordPress?

Ссылка скопирована
1 ответ

Хочу добавить собственный префикс ко всем подписям к изображениям постов 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, не знаю. Я вообще подписями не пользуюсь.
    Но я даже не понимаю к чему применять этот фильтр - какая проблема сразу дописать этот "префикс" при вставке изображения? Всё равно это фильтр работает только на моменте вставки, а далее если редактировать контент/картинку уже ничего не меняется.

    Если нужно отредактировать массово уже существующие вставки, то для этого уже другие решения.

Нужно решить такую задачу?

Опишите проблему, и специалист поможет с настройкой, исправлением ошибки или доработкой сайта. Подберём понятный план работ без лишней переписки.

Заказать помощь
Лучший ответ
1
Андрей PHP Ответ

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);

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 только на этапе вывода. Это обратимо: убрали фильтр — подписи снова отображаются как раньше. В коде важно не добавлять префикс повторно, иначе после нескольких обработок можно получить «Фото: Фото: ...».

  • Для классического редактора и shortcode используется фильтр img_caption_shortcode.
  • Для Gutenberg — render_block или кастомная обработка конкретного блока.
  • Для массового изменения уже сохранённых подписей в базе нужен отдельный скрипт миграции и бэкап.

Если префикс нужен только визуально, можно рассмотреть CSS через ::before, но это не всегда хорошо для доступности и копирования текста. PHP-фильтр вывода обычно практичнее.

Другие ответы (0)

Пока нет других ответов. Будьте первым, кто поможет автору.

Ответить на вопрос

комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Вам также может быть интересно