我有一个相当简单的短代码用于制作报价分组框,其名称为:
[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正在某些地方过滤某些东西,我需要禁用它。有人有什么想法吗?
感谢您的帮助。
答案 0 :(得分:1)
将短代码处理函数的返回值插入到 发布内容输出代替短代码宏。记得要用 返回而不是回声 - 任何回显的东西都会输出到 浏览器,但它不会出现在页面上的正确位置。
在wpautop和wptexturize后格式化后解析短代码 已经应用(但请参阅下面关于2.5.0和2.5.1的说明 差异)。这意味着您的短代码输出HTML不会 自动应用卷曲引号,添加p和br标签等等 上。如果您确实希望格式化短代码输出,则应该 返回输出时直接调用wpautop()或wptexturize() 来自您的短代码处理程序。
wpautop识别短代码语法,并尝试不包装p或 短标签周围的标签,独立在一条线上。 打算以这种方式使用的短代码应该确保 输出包装在适当的块标记中,例如p或div。
答案 1 :(得分:0)
不确定这是否有帮助,但您是否尝试将外引号更改为单引号?
[jasminesays quote='blah <a href="#">de</a> blah']
或删除内部引号?
[jasminesays quote="blah <a href=#>de</a> blah"]
答案 2 :(得分:0)
为什么不在短代码中添加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>';