如何永久应用内容过滤器?

时间:2010-11-03 作者:Dan Gayle

我有以下临时过滤器来修复内容错误。我们的帖子中有4位邮政编码的数据,因为在创建原始文件时,前导零被剪切了。(例如,马萨诸塞州的邮政编码是0XXXX,但现在在我们的内容中是XXXX)

function fix_zip_code($content){
    if (preg_match(\'/<span class="postal-code">(\\d{4})<\\/span>/i\',$content, $match)){
        $content = str_replace($match[0],\'0\'.$match[0],$content);
    }
    return $content;
}
add_filter(\'the_content\', \'fix_zip_code\');
如何一次将该过滤器应用于所有内容并重新保存帖子,以便完全删除regex过滤器?

2 个回复
最合适的回答,由SO网友:goldenapples 整理而成

//run once

$allposts = get_posts(\'post_status=publish&numberposts=-1\');
foreach ($allposts as $thispost) {
     wp_update_post( array(
          \'ID\' => $thispost->ID,
          \'post_content\' => fix_zip_code($thispost->post_content)
          )
     );
}
但正如Rarst所提到的,在做任何事情之前备份数据库。。。

SO网友:Rarst

您可以尝试从WP/PHP方面实现这一点,但我认为在这种情况下,在数据库上运行替换会更容易。

例如,周围有几种工具Search and Replace for WordPress Databases. 只要确保在安装之前正确备份数据库,并在可能的情况下单独安装测试即可。

结束

相关推荐