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 ответа
Возвращаемое значение функции обработчика шорткода вставляется в вывод содержимого поста вместо макроса шорткода. Не забудьте использовать 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>';