WordPress有一个名为wpautop
的内置过滤器,有助于在&#34; visual&#34;中添加文本。模式。此功能会在段落中添加<p>
和<br>
,以提供&#34;您所看到的内容&#34;输出。
Details about this function can be found here.
上述链接还提供了删除此过滤器的功能:
remove_filter( 'the_content', 'wpautop' );
remove_filter( 'the_excerpt', 'wpautop' );
但是,此功能在指定the_content
时会从所有内容中删除过滤器。
我需要修改代码以定位具有特定类的某个div
。
我用div class="exclude-wpautop">
包装了我想要排除过滤器的文本,并修改了函数:
remove_filter( 'exclude-wpautop', 'wpautop' );
但这没有用。
另外,As I mentioned in my other question here,我尝试创建一个短代码来定位此div
标记,但它也没有用。
function stop_wpautop(){
remove_filter( 'exclude-wpautop', 'wpautop' );
}
add_shortcode( 'stop-wpautop', 'stop_wpautop');
有没有办法定位特定的div
并将功能应用于它?或创建一个短代码,当它包装文本时,它只会停止wpautop
对这部分文本的影响?
提前致谢。
答案 0 :(得分:0)
首先,remove_filter的第一个参数是过滤器名称,而不是HTML元素的类名。
由于wpautop()不会处理HTML <pre>
元素,我会替换你的
<div class="exclude-wpautop">...</div>
与
<pre class="exclude-wpautop">...</pre>
然后,您可以将<pre>
HTML元素更改为<div>
元素,并在 wpautop()之后运行过滤器
add_filter( 'the_content', 'rewrite_pre_exclude_wpautop', 11 );
其中rewrite_pre_exclude_wpautop()只是用<pre>
和</pre>
代码替换您的临时<div>
和</div>
代码;
rewrite_pre_exclude_wpautop()如下所示:
add_filter( 'the_content', 'rewrite_pre_exclude_wpautop', 11 );
function rewrite_pre_exclude_wpautop( $content ) {
$pre = '<pre class="exclude-wpautop">';
$len = strlen( $pre );
$pos = 0;
while ( ( $pos = strpos( $content, $pre, $pos ) ) !== FALSE ) {
$content = substr_replace( $content, '<div>', $pos, ? );
$pos += ?;
$pos = strpos( $content, '</pre>', $pos );
$content = substr_replace( $content, '</div>', $pos, ? );
$pos += ?;
}
return $content;
}