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


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

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

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

 2
Author: Eddie, 2014-12-07

1 answers

Атрибуты шорткода заголовка объединяются с атрибутами по умолчанию с помощью shortcode_atts функционирует примерно так (см. Источник в 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");
 4
Author: gmazzap, 2014-12-07 16:58:41