Как выводить подпись шорткода где-то кроме the_content

13 сент. 2010 г., 22:21:49
Просмотры: 1.42K
Голосов: 0

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

Изображения не загружены в WordPress, а подключены через функционал редактора "Добавить изображение" → "Из URL", что приводит к следующему шорткоду:

[caption id="" align="alignnone" width="300" caption="Леонард Нимой сделал гораздо больше, чем просто сыграл мистера Спока"]<a href="http://example.com/nimoy"><img src="http://example.com/uploads/nimoy.jpg" alt="Леонард Нимой в черном костюме" title="Леонард Нимой" width="300" height="228" /></a>[/caption]

Какие есть идеи? Я предполагаю, что нужно использовать фильтр img_caption_shortcode, но не уверен, правильный ли это подход.

0
Все ответы на вопрос 1
6

Попробуйте это:

$caption_info = array();

add_filter( 'img_caption_shortcode', 'capture_caption', 10, 3 );

function capture_caption( $blank = '', $attr, $content ) {

    global $caption_info;

    $caption_info[] = array('attr' => $attr, 'content' => $content );
    return ' ';
}

Это сохранит информацию из всех подписей в глобальную переменную $caption_info и подавит их отображение в контенте (возвращается пробел, потому что результат фильтра игнорируется, если он пуст).

14 сент. 2010 г. 06:49:39
Комментарии

Отлично. Я знал, что это как-то сработает. Добавить ли условие is_singular() к этому?

Dan Gayle Dan Gayle
14 сент. 2010 г. 16:33:58

Ну, это зависит от того, как именно вы хотите, чтобы это работало. В этой форме оно будет срабатывать при каждом вызове функции img_caption_shortcode(), которая обрабатывает шорткоды [caption] и [wp_caption]. Если вы хотите пропустить при некоторых условиях - проверяйте их и возвращайте пустую строку '' в функции.

Rarst Rarst
14 сент. 2010 г. 16:43:13

Я добавил это, но выполнение global $caption_info; var_dump($caption_info); в моем single.php выводит array(0) {}. Идеи?

Dan Gayle Dan Gayle
14 сент. 2010 г. 20:10:37

Глупый момент, но я сам на это напоролся, так что... Переменная заполняется только после отображения контента и выполнения шорткодов. Вы делаете это после the_content()?

Rarst Rarst
14 сент. 2010 г. 20:16:52

Я только что сам это понял и уже собирался задать этот вопрос, лол. Помогает сделать так: $content = apply_filters('the_content',get_the_content()); раньше на странице. Затем я могу просто сделать echo $content там, где должен быть the_content(). Но это всё равно кажется костылём. Есть ли способ запустить этот фильтр раньше?

Dan Gayle Dan Gayle
14 сент. 2010 г. 20:40:04

Вероятно, есть несколько способов решить эту проблему. Я бы попробовал получить контент (без присваивания переменной) и удалить фильтр из img_caption_shortcode, чтобы он больше не выполнялся и не дублировал информацию при фактическом отображении контента. Также можно просто получить контент и искать шорткоды с помощью regex, но это будет совершенно другой подход.

Rarst Rarst
15 сент. 2010 г. 05:46:03
Показать остальные 1 комментариев