Настройка подписи к изображению в визуальном редакторе
Еще раз хочу обратиться к вам за помощью.
Мне нужно изменить подпись под изображениями в записях. Вместо стандартной подписи (post_excerpt) я хочу выводить заголовок изображения (post_title) (жирным) и описание изображения (post_content), примерно так:
С помощью @birgire мне удалось добиться этого, используя фильтр img_caption_shortcode
(Ссылка). Однако это решение оказалось неидеальным.
По умолчанию, при вставке изображения через визуальный редактор WordPress, подпись добавляется под изображением. При редактировании изображения эту подпись можно изменить индивидуально (для конкретного экземпляра), как показано здесь:
Проблема использования фильтра img_caption_shortcode
в том, что он полностью заменяет возвращаемое содержимое, делая невозможными индивидуальные корректировки подписи. Мне хотелось бы сохранить стандартное поведение WordPress, но при этом заменить стандартную подпись на заголовок и описание изображения.
Пока у меня нет четкого понимания, как этого добиться. Предполагаю, что нужно изменить текст, который автоматически вставляется в визуальный редактор вместе с изображением. Может кто-то помочь с этим или направить в нужную сторону? Любая помощь будет очень ценной. Спасибо.
РЕДАКТИРОВАНО: Вот код, который я использую сейчас:
<?php
/**
* Название плагина: Модифицированная подпись изображения
* Описание: Заменяет стандартную подпись на заголовок и описание изображения
* Ссылка на плагин: https://wordpress.stackexchange.com/a/258612/26350
*/
namespace WPSE\Q258586;
add_action( 'init', [ new Caption, 'init' ] );
class Caption
{
private $attachment_id ;
public function init()
{
add_filter( 'img_caption_shortcode', [ $this, 'shortcode' ], 999, 3 );
add_filter( 'shortcode_atts_caption', [ $this, 'atts' ], 999, 3 );
}
public function shortcode( $output, $attr, $content )
{
if( isset( $attr['id'] ) && preg_match( '/attachment_\d+/i', $attr['id' ] ) )
$this->attachment_id = str_replace( 'attachment_', '', $attr['id'] );
return $output;
}
public function atts( $atts, $pair )
{
if( ! $this->attachment_id )
return $atts;
$img = get_post( $this->attachment_id );
if( is_a( $img, '\WP_Post' ) )
{
$atts['caption'] = sprintf(
'<span class="title-css">%s</span>
<br><span class="description-css">%s</span>',
esc_html( $img->post_title ),
esc_html( $img->post_content )
);
}
$this->id = null;
return $atts;
}
}
