Как лучше всего применить шорткод do в media.php для подписей
Я хотел иметь возможность добавлять короткие коды в подпись к изображению. Я успешно сделал это, изменив media.php файл со следующим непосредственно перед возвращением.
$atts['caption']= do_shortcode($atts['caption']);
Это отлично работает, но я уверен, что есть лучший подход, так как я бы предпочел не изменять media.php каждый раз, когда я обновляю WP.
1 answers
Атрибуты шорткода заголовка объединяются с атрибутами по умолчанию с помощью shortcode_atts
функционирует примерно так (см. Источник в media.php
):
$atts = shortcode_atts( array(
'id' => '',
'align' => 'alignnone',
'width' => '',
'caption' => '',
'class' => '',
), $attr, 'caption' );
Таким образом, 3-й $shortcode
параметр используется со значением 'caption'
.
Как вы можете видеть в shortcode_atts
исходный код, это означает, что фильтр
Будет запущен, что позволит вам изменить атрибуты, которые будут использоваться.
В вашем случае вы должны что-то сделать например:
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");