从特定div标签中删除wpautop的功能

时间:2018-04-04 07:51:38

标签: php wordpress

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对这部分文本的影响?

提前致谢。

1 个答案:

答案 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;
}