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 отфильтровывает определенные вещи где-то, и мне нужно отключить это. У кого-нибудь есть идеи?

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

3 ответа

Из Кодекса WordPress

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

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

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

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

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

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

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

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

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

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

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

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

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

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>';
Другие вопросы по тегам