我正在尝试为我的wordpress主题创建一些短代码,但是我在使用wordpress添加关闭p标签时遇到了问题。
这是我在functions.php文件中的短代码
function fixed_background( $atts, $content = null ) {
extract(shortcode_atts(array(
"class" => '',
"img_src" => '#',
), $atts));
$return =
'<div class="fixed-background-image-container">
<div class="fixed-background-image"><span style="background-image: url('.$img_src.')" class="background-fixed"></span>
<div class="block content-960 center-relative">' . do_shortcode($content) . '</div>
</div>
</div>
<div class="clear"></div>';
return $return;
}
add_shortcode("fixed_background", "fixed_background");
以下是html输出的结果:
<div class="fixed-background-image-container">
<div class="fixed-background-image"><span style="background-image: url(http://www.blahblahblah.co.uk/photo2.jpg)" class="background-fixed"></span> </p>
<div class="block content-960 center-relative">
</div></div>
</p></div>
<div class="clear"></div>
请注意,里面放有2个p标签,我该如何摆脱这些?
我还使用以下代码禁用wordpress的自动格式化功能:
function webtreats_formatter($content) {
$new_content = '';
/* Matches the contents and the open and closing tags */
$pattern_full = '{(\[raw\].*?\[/raw\])}is';
/* Matches just the contents */
$pattern_contents = '{\[raw\](.*?)\[/raw\]}is';
/* Divide content into pieces */
$pieces = preg_split($pattern_full, $content, -1, PREG_SPLIT_DELIM_CAPTURE);
/* Loop over pieces */
foreach ($pieces as $piece) {
/* Look for presence of the shortcode */
if (preg_match($pattern_contents, $piece, $matches)) {
/* Append to content (no formatting) */
$new_content .= $matches[1];
} else {
/* Format and append to content */
$new_content .= wptexturize(wpautop($piece));
}
}
return $new_content;
}
// Remove the 2 main auto-formatters
remove_filter('the_content', 'wpautop');
remove_filter('the_content', 'wptexturize');
// Before displaying for viewing, apply this function
add_filter('the_content', 'webtreats_formatter', 99);
add_filter('widget_text', 'webtreats_formatter', 99);
P.S旁注,无论如何我可以整理编码,见例:
<div class="blahblah">
<div class="dv2">
<div class="dv3">
</div></div></div>
但更像是
<div class="blahblah">
<div class="dv2">
<div class="dv3">
</div>
</div>
</div>
答案 0 :(得分:2)
您可以尝试使用以下代码修复空段落:
add_filter('the_content', 'fix_shortcode_empty_paragraphs');
function fix_shortcode_empty_paragraphs($content) {
$array = array(
'<p>[' => '[',
']</p>' => ']',
']<br />' => ']',
);
$content = strtr($content, $array);
return $content;
}
并且不要忘记删除您应用的当前修补程序以禁用自动格式化。