Я хотел иметь возможность помещать короткие коды в подпись изображения. Я успешно сделал это, изменив файл 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");