提问者:小点点

函数可从特定div标记中删除wpautop


WordPress有一个名为wpautop的内置过滤器,可以在可视化模式下添加文本。此函数添加

上述链接还提供了删除此筛选器的功能:

remove_filter( 'the_content', 'wpautop' );
remove_filter( 'the_excerpt', 'wpautop' );

但是,当指定内容时,此函数会从所有内容中删除过滤器。

我需要修改代码以针对具有特定类的某个div

我用一个div class="排除-wpautop"包装了我想要排除过滤器的文本

remove_filter( 'exclude-wpautop', 'wpautop' );

但这不起作用。

另外,正如我在这里的另一个问题中提到的,我尝试创建一个短代码来针对这个div标记,但它也不起作用。

function stop_wpautop(){
remove_filter( 'exclude-wpautop', 'wpautop' );
}
add_shortcode( 'stop-wpautop', 'stop_wpautop'); 

是否有方法针对特定的div并对其应用该函数?或者创建一个短代码,当它包装文本时,它仅对这部分文本停止wpautop的效果?

提前谢谢。


共2个答案

匿名用户

首先,remove_filter的第一个参数是过滤器名称,而不是HTML元素的类名。

因为wpautop()不会处理HTML

<div class="exclude-wpautop">...</div>

具有

<pre class="exclude-wpautop">...</pre>

然后,您可以更改

add_filter( 'the_content', 'rewrite_pre_exclude_wpautop', 11 );

其中rewrite_pre_exclude_wpautop()只是替换你的临时

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

匿名用户

如何从添加标记中排除内容块

在您的帖子中,您可以添加标签

例子:

<pre> your any content and any html tags, without adding tag p </pre>

然后将下面的代码添加到函数中。php删除所有标签

add_filter( 'the_content', 'al_wputopfix', 999);

//AL wputop fix
function al_wputopfix ($content) {
if ( stripos( $content, '<pre>' ) !== false ){
$content = preg_replace( '~<pre>|</pre>~', '', $content );
}
return $content;
}