从_Content()中删除所有内联样式

时间:2013-03-22 作者:Fredy31

对于我当前的一个项目,我不得不将博客从一个旧的Wordpress站点转移到我的项目中。

事情进展顺利,直到我看到所有帖子都是从Word复制粘贴的,几乎每一段之前都留下了这样的内容:

<span style="font-size: medium; font-family: georgia,palatino;">
在一些地方,像这样的事情:

<p style="text-align: justify;">
<p style="text-align: justify;"><span style="font-size: medium; font-family: georgia,palatino;"><strong><span style="color: #000000;">
因此,因为我没有40个小时(甚至更少的耐心)去查看每一篇文章(大约有100篇)并删除那些不需要的标记,所以我正在寻找一个过滤器,它可以在输出\\u内容()之前删除所有样式(可能包含文本修饰:下划线的除外)元素

有这样的事吗?

4 个回复
最合适的回答,由SO网友:Reza Mamun 整理而成

如果我们想删除所有内联样式,那么只需在函数中添加以下代码即可。php。

add_filter(\'the_content\', function( $content ){
    //--Remove all inline styles--
    $content = preg_replace(\'/ style=("|\\\')(.*?)("|\\\')/\',\'\',$content);
    return $content;
}, 20);

SO网友:golchha21

只需将此添加到您的函数中。php。

Note: This filter works at the time of saving/updating the post.

add_filter( \'wp_insert_post_data\' , \'filter_post_data\' , \'99\', 2 );

function filter_post_data( $data , $postarr ) {

    $content = $data[\'post_content\'];

    $content = preg_replace(\'#<p.*?>(.*?)</p>#i\', \'<p>\\1</p>\', $content);
    $content = preg_replace(\'#<span.*?>(.*?)</span>#i\', \'<span>\\1</span>\', $content);
    $content = preg_replace(\'#<ol.*?>(.*?)</ol>#i\', \'<ol>\\1</ol>\', $content);
    $content = preg_replace(\'#<ul.*?>(.*?)</ul>#i\', \'<ul>\\1</ul>\', $content);
    $content = preg_replace(\'#<li.*?>(.*?)</li>#i\', \'<li>\\1</li>\', $content);

    $data[\'post_content\'] = $content;

    return $data;
}
<人力资源>

Note: This filter works at the time when function the_content() is executed.

add_filter( \'the_content\', \'the_content_filter\', 20 );

function the_content_filter( $content ) {
    $content = preg_replace(\'#<p.*?>(.*?)</p>#i\', \'<p>\\1</p>\', $content);
    $content = preg_replace(\'#<span.*?>(.*?)</span>#i\', \'<span>\\1</span>\', $content);
    $content = preg_replace(\'#<ol.*?>(.*?)</ol>#i\', \'<ol>\\1</ol>\', $content);
    $content = preg_replace(\'#<ul.*?>(.*?)</ul>#i\', \'<ul>\\1</ul>\', $content);
    $content = preg_replace(\'#<li.*?>(.*?)</li>#i\', \'<li>\\1</li>\', $content);
    return $content;
}

SO网友:alordiel

我尝试了上面的保存/更新方法,但对我无效,所以我选择了另一种方法。我导出了整个wp\\u posts表,在Sublime中打开它并替换了一个regex。我用过style="*.*?" 找到所有的箱子,用空箱子代替。然后删除旧表的内容并导入新表。

如果有人尝试这种方法,请确保你有一个清晰的备份,以防wp\\u post表中有其他一些帖子类型,事情变得有点混乱。

SO网友:vancoder

我会查看content\\u save\\u pre filter,然后可能会应用一些奇特的正则表达式。

结束

相关推荐

Query posts from current year

我不太明白为什么这不管用。我试图使用以下内容在首页上仅显示当年的帖子:<?php query_posts( \"&year=$current_year&order=DESC\"); ?> 但它仍然显示2012年的帖子(它们实际上不是2012年发布的,但我将发布日期设置为其中一篇帖子,显示日期为去年2月)根据文件,我应该这样做。有人能解释一下吗?谢谢