Как лучше всего применять do_shortcode в media.php для титров

Я хотел иметь возможность помещать короткие коды в подпись изображения. Я успешно сделал это, изменив файл media.php следующим образом перед возвратом.

$atts['caption']= do_shortcode($atts['caption']); 

Он отлично работает, но я уверен, что есть лучший подход, так как я бы предпочел не изменять media.php каждый раз, когда я обновляю WP.

Атрибуты media.php кода media.php объединяются с настройками по умолчанию, используя функцию media.php (см. Источник в media.php ):

 $atts = shortcode_atts( array( 'id' => '', 'align' => 'alignnone', 'width' => '', 'caption' => '', 'class' => '', ), $attr, 'caption' ); 

Таким образом, параметр 3-го $shortcode используется со значением 'caption' .

Как вы можете видеть в исходном коде shortcode_atts , это означает, что фильтр

"shortcode_atts_caption"

будет запущен, что позволит вам изменить атрибуты, которые будут использоваться.

В вашем случае вам нужно сделать что-то вроде:

 add_filter("shortcode_atts_caption", function($atts) { if (isset($atts['caption'])) { $atts['caption'] = do_shortcode($atts['caption']); } return $atts; }); 

Обратите внимание: если заголовок будет содержать 'caption' это приведет к бесконечному циклу.

Этого можно избежать, удалив фильтр до вызова do_shortcode в заголовке:

 function my_caption_shortcode($atts) { if (isset($atts['caption'])) { // avoid endless loop remove_filter( current_filter(), __FUNCTION__); // apply shortcodes $atts['caption'] = do_shortcode($atts['caption']); // restore filter add_filter(current_filter(), __FUNCTION__); } return $atts; } add_filter("shortcode_atts_caption", "my_caption_shortcode");