从所有内容中删除HTML语法的更好方法

时间:2012-05-14 作者:Álex Acuña Viera

我有一堆文章是通过非常旧的Joomla 1.0安装导入的。这些帖子的内容有很多不需要的内联html。我可以用这样的东西来清理所有的东西(我用这个做了一个模板,然后打开了它):

<?php 
$tochange = get_posts(\'post_type=post&numberposts=-1\');    
foreach ($tochange as $post):
    setup_postdata($post);

    $changed = array();
    $changed[\'ID\'] = $post->ID;
    $changed[\'post_content\'] = strip_tags($post->post_content, \'<img><a>\');
    print_r($post->ID); 
    echo \'<br />\';
    $out = wp_update_post($changed);
    echo \'changed:\'.$out.\'<br />\';

    unset($changed);

endforeach;
?>
但考虑到每个帖子都有一个循环,它似乎有点臃肿。有什么建议吗?

2 个回复
SO网友:onetrickpony

如果只需要更改帖子内容,可以通过直接查询数据库来避免get\\u posts/WP\\u查询的开销:

global $wpdb;

$results = $wpdb->get_results("SELECT ID, post_content FROM {$wpdb->posts}");

$total = count($results); 
$changed = 0;

foreach($results as $entry){

  $new_content = strip_tags($entry->post_content, \'<img><a>\');

  if($entry->post_content !== $new_content){

    $wpdb->query($wpdb->prepare(
                 "UPDATE {$wpdb->posts} SET post_content = %s WHERE ID = %s)", 
                    $new_content, $entry->ID));

    $changed++;
  }

}

printf("Changed %d out of %d posts", $changed, $total);
(先备份db)

SO网友:Joshua

要更改每个帖子,您需要循环浏览每个帖子。假设您的代码被验证了(粗略地看一眼似乎就会验证),这或多或少就是我的做法。

您可以通过MySQL查询或导出wp_posts 将表导入sql文件,并对该文件运行查找/替换,然后重新导入表。但是,我再怎么强调也不为过,BACKUP YOUR DB FIRST

事后看来,使用后一种方法会更快,因为php可能会加载您的服务器一段时间。

HeidiSQL 能够导出表并添加所有组合查询语言以重新导入DROP IF EXISTSCREATE IF NOT EXISTS 使您的CTRL+H 操作远离漂亮的格式。

结束

相关推荐

Grabbing specific content

现在我正在做这个(伪代码)posts = content_type(\"special_stuff\"); $i = 0; $n = 5; $while(have_posts) { if($i == $n) { // print the content } ++$i; } 这就是我一直在做的n第项。我相信有更好的方法,但我是一个不折不扣的人。相关:(这个问题)如何获取内容类型的第n个元素?例如