Wordpress очищает ‹a href› от шорткодов

У меня есть довольно прямолинейный шорткод для создания окна выхода цитаты, который называется:

[jasminesays quote="blah de blah"]

Мертво легко. Однако, когда я пытаюсь поместить в нее ссылку, WordPress вообще не возвращает цитату. Весь другой HTML, который я пробовал, выглядит нормально, кажется, что он падает только с чем-то вроде:

[jasminesays quote="blah <a href="#">de</a> blah"]

Что-то типа

[jasminesays quote="blah <p>de</p> blah"]

работает отлично.

Код для обработки шорткода:

function mm_jasmineSays( $atts ) { 
extract( shortcode_atts( array(  
        "quote" => '',
       ), $atts ) );

return '<link href="'.get_bloginfo( 'template_directory' ).'/css/shortcodes.css" rel="stylesheet" type="text/css" />
        <div class="jasmine-says">
            <h2>Jasmine says...</h2>
            <div class="jasmine-says-quote">
                <p><img src="'.get_bloginfo( 'template_directory' ).'/imgs/shortcodes/quote-1.jpg" /></p>
                <p class="quote">'.$quote.'</p>
                <p><img src="'.get_bloginfo( 'template_directory' ).'/imgs/shortcodes/quote-2.jpg" /></p>
            </div>
        </div>';
}
add_shortcode('jasminesays', 'mm_jasmineSays');

но я не думаю, что это проблема, я предполагаю, что WordPress где-то фильтрует определенные вещи, и мне нужно отключить это. У кого-нибудь есть идеи?

Спасибо за любую помощь.


person artparks    schedule 21.10.2011    source источник


Ответы (3)


Из Кодекса WordPress

Возвращаемое значение функции обработчика шорткода вставляется в вывод содержимого публикации вместо макроса шорткода. Не забудьте использовать возврат, а не эхо — все, что будет отображено, будет выведено в браузер, но не появится в нужном месте на странице.

Шорткоды анализируются после применения форматирования постов wpautop и wptexturize (но см. примечание ниже о различиях 2.5.0 и 2.5.1). Это означает, что в выходном HTML-коде вашего шорткода не будут автоматически применяться фигурные кавычки, добавляться теги p и br и т. д. Если вы хотите, чтобы ваш вывод шорткода был отформатирован, вы должны вызвать wpautop() или wptexturize() напрямую, когда вы возвращаете вывод обработчика шорткода.

wpautop распознает синтаксис шорткода и попытается не оборачивать теги p или br вокруг шорткодов, которые стоят отдельно в строке сами по себе. Шорткоды, предназначенные для использования таким образом, должны гарантировать, что вывод заключен в соответствующий блочный тег, такой как p или div.

person Fernando Briano    schedule 21.10.2011
comment
добавление $quote = apply_filters('the_content', $quote); функция шорткода не работает, что кажется странным. это просто кажется, что он специально выбирает теги ‹a› и ничего больше. - person artparks; 21.10.2011

Не уверен, что это поможет, но пробовали ли вы изменить внешние кавычки на одинарные?

[jasminesays quote='blah <a href="#">de</a> blah']

или удаление внутренних кавычек?

[jasminesays quote="blah <a href=#>de</a> blah"]
person meeble    schedule 22.12.2011

почему бы не добавить параметр URL в шорткод?

Что-то вроде добавления:

    function mm_jasmineSays( $atts ) { 
extract( shortcode_atts( array(  
"quote" => '',
"url" => '',
), $atts ) );

А затем добавление

<a href="'.$url.'"> <h2>Jasmine says...</h2></a>

Может быть, это могло бы сработать... или вместо этого использовать $output, например:

global $post;
$output .= '<div class="jasmine-says">';
if($quote !== '')
$output .= '<a href="'.$url.'"><h2>Jasmine says...</h2>';
        $output .= '<div class="jasmine-says-quote">'
            $output .='<p><img src="'.get_bloginfo( 'template_directory' ).'/imgs/shortcodes/quote-1.jpg" /></p>';
            $output .='<p class="quote">'.$quote.'</p>';
            $output .='<p><img src="'.get_bloginfo( 'template_directory' ).'/imgs/shortcodes/quote-2.jpg" /></p>';
        $output .='</div>';
    $output .='</div>';
person artist learning to code    schedule 23.07.2013