删除/替换自动发布的帖子内容中的img标签

时间:2013-10-01 作者:adnan

在我的博客中,我为帖子设置了自动发布,每天我都会收到5000篇新帖子,现在我有超过15万篇帖子。

我需要一个脚本、插件或一个函数来连接到我的数据库并删除所有img 来自帖子内容的标记。

我知道与img标记匹配的正则表达式,但我找不到使用此正则表达式的脚本

<img[^>]+\\>  
替换已发布帖子中的IMG,并防止新帖子包含图像标签。

我发现this class 我认为这将实现我的目标,但我不确定如何编辑此内容

$wpdb->query(
  "UPDATE $wpdb->posts SET post_parent = 7
  WHERE ID = 15
  AND post_status = \'static\'"
);
满足我的需要。

please note: 我的网站正在使用一些自动发布帖子的功能任何想法!

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

您可以使用该功能get_posts 获取所有帖子,然后使用foreach循环,使用您发布的regex替换img标记,然后使用wp_update_post 更改帖子内容:

function remove_images_form_past_posts() {    
  if ( get_transient(\'images_removed_from_past\') ) return;
  $posts = get_posts(\'nopaging=1\');    
  if ( $posts ) {
    foreach ( $posts as $post ) {
      $newcontent = preg_replace(\'/<img[^>]+\\>/i\', \'\', $post->post_content);
      $newpost = array( \'ID\' => $post->ID, \'post_content\' => $newcontent);
      wp_update_post($newpost);
    }
    set_transient(\'images_removed_from_past\', 1);
  }
}

add_action(\'admin_init\',\'remove_images_form_past_posts\');
此代码只能使用一次,以更改过去的帖子内容。为了确保它只运行一次,我使用了瞬态。参见法典Transient API.

现在您必须添加一个钩住\'wp_insert_post_data\' 过滤器挂钩和防止新帖子添加图像:

function remove_images_before_publish( $data, $postarr ) {
  if ( ! empty($data[\'post_content\']) )
    $data[\'post_content\'] = preg_replace(\'/<img[^>]+\\>/i\', \'\', $data[\'post_content\']);
  return $data;
}
add_filter(\'wp_insert_post_data\',\'remove_images_before_publish\', 20, 2);

结束

相关推荐

如何修改此$wpdb查询以接受POST状态数组

我正在使用来自this accepted 答案,它获取自定义字段键的所有值(十字柱)。如何修改它以允许post状态数组?function get_meta_values( $key = \'\', $type = \'post\', $status = \'publish\' ) { global $wpdb; if( empty( $key ) ) return; $r = $wpdb->get_col( $wpd