我正在WordPress中使用短代码,我正在努力解决一个问题。我试图将$内容包装到标签中,但它无法正常工作。下面是我的shortcode函数:
<?php
add_shortcode(\'rect\', \'pp_rect\');
function pp_rect($atts, $content=null) {
extract(shortcode_atts(array(
\'x\' => 1,
\'y\' => 1,
\'url\' => false,
\'img\' => true,
), $atts));
preg_match(\'@src="([^"]+)"@\' , $content, $match);
$img = array_pop($match);
$content = preg_replace("/<img[^>]+\\>/i", "", $content);
if(!$img)
$out = \'<div class="rect rect-\'.$x.\'-\'.$y.\' no-img" style="background-image: url(\'.$img.\');"><div class="rect-content">\';
else
$out = \'<div class="rect rect-\'.$x.\'-\'.$y.\' img" style="background-image: url(\'.$img.\');"><div class="rect-content">\';
if ($url)
$out .= \'<a href="\'.$url.\'">\'.do_shortcode($content).\'</a></div></div>\';
else
$out .= do_shortcode($content).\'</div></div>\';
return $out;
}
?>
如果我想执行这样的短代码
[rect x=2 y=2 url=#]
<h1>Big header</h1>
<img src="someimg.jpg">
[/rect]
我收到这样的输出:
<a href="#">
<p></p>
<h1>Big header</h1>
<p></p>
</a>
<p>
<a href="#"></a>
</p>
而不是:
<a href="#">
<h1>Big header</h1>
</a>
我盯着一个代码,找不到它有什么问题。非常感谢您的帮助。祝你愉快Patryk
最合适的回答,由SO网友:Craig Pearson 整理而成
这是WordPress中的一个过滤器,名为wpautop
在发布帖子时,它可以使格式更清晰,然而,当你想要对格式进行更多控制时,这可能是一件痛苦的事。它基本上将返回内容包装在段落中,以便在编辑器中看到的空间在前端得到遵守。
您可以将其完全禁用,方法是将其放置在函数中。php
remove_filter( \'the_content\', \'wpautop\' );
或者,您可以通过将其放置在函数中,仅对封装在短代码中的元素禁用它。php,它将延迟格式化,直到呈现短代码之后。这就是12在add\\u filter调用中的含义-它基本上是说作为第12个进程执行此操作,例如,短代码可能会在第6个进程中执行
remove_filter( \'the_content\', \'wpautop\' );
add_filter( \'the_content\', \'wpautop\' , 12);
您可以在此处阅读有关codex自动格式化的更多信息:
http://codex.wordpress.org/Function_Reference/wpautop