这个代码有什么问题?我得做一个区块引用短码

时间:2013-03-04 作者:byronyasgur

我有一个blockquote的短代码[blockquote]this is the quote[/blockquote] ... 这是代码。

function shortcode_shortcodetest( $atts, $content = null ) {
    $return = \'<div class="blockquotewrapper"><blockquote>\';
    $return .= do_shortcode( $content );
    $return .= \'</blockquote>\';
    $return .= \'</div>\';
    return $return;
}
add_shortcode( \'shortcodetest\', \'shortcode_shortcodetest\' );
因此,我预计输出为:

<div class="blockquotewrapper">
<blockquote><p>this is a test</p></blockquote>
</div> 
或者也许

<div class="blockquotewrapper">
<blockquote>this is a test</blockquote>
</div>
但我得到的是:

<div class="blockquotewrapper">
<blockquote>this is a test<p></p></blockquote>
</div>
(注意开头段落标记的位置)

是什么导致开口p 标记以移动到它所在的位置。我注意到,如果我删除divblockquote 从shortcode函数中,这不会发生,但出于一些样式的原因,我想使用包装器,因为在完整版本中,我有一个关联的引用可能性。。。很明显,我需要一个blockquote。

2 个回复
最合适的回答,由SO网友:byronyasgur 整理而成

我只是碰巧发现了它是什么,所以我想我会把它留在这里,因为它可能会对将来的人有所帮助。一些网页,包括this question 建议使用以下代码防止wpautop在短代码之后运行。现在我不能完全理解这段代码,但我的函数中有它。php,无论出于什么原因,它都是上述原因。

remove_filter( \'the_content\', \'wpautop\' );
add_filter( \'the_content\', \'wpautop\' , 12);

SO网友:Chris Strutton

查看codex 显示WordPress自动将内容中的双线分隔符更改为段落标记。您在函数中输入的代码。php将禁用此功能。这将更改您网站上每个页面上的内容。

更好的解决方案可能是检查您的短代码函数。它很可能在输出的末尾输出一些空白。Mabey在html输出的末尾,在打开前留下一个空行<?php 标签

?>

output some html here....               (one line end here)
                                        (one line end here)
<?php
some other functions here...
您所拥有的可能在这里工作,但它将更改您所有页面的输出。我怀疑你是这么想的。

结束

相关推荐

Using shortcodes in PHP

我试图在我的页面中使用短代码,我从一个简单的测试开始。在里面functions.php:function HelloWorldShortcode() { return \'<p>Hello World!</p>\'; } add_shortcode(\'helloworld\', \'HelloWorldShortcode\'); 在中index.php:[helloworld] 这不会产生<p>Hello World