从帖子和媒体库中查找和删除重复图像的正确方法是什么?

时间:2012-04-20 作者:jnthnclrk

我刚刚将一个较大的WP博客从MediaTemple导出到PHPFog。

我使用了标准的WordPress导出和导入插件。

不知什么原因,我的所有媒体资产都被复制了。我现在每篇文章有两倍多的图片。

如果一个原始文件名为“Lot-44-Warrens.jpg”,那么它现在有一个副本名为“Lot-44-Warrens1.jpg”,这两个文件都附在同一个帖子上。

我现在在大约250多篇文章中有许多重复的图像。

因此,我的问题是如何从媒体库和帖子中删除上述副本?

我试图用“*1.jpg”搜索媒体库,但没有成功。

寻找一个简洁的解决方案,这并不意味着手动删除每个重复。

也许我可以运行一个MySQL查询来删除库和帖子中的重复项?

所讨论的网站是:http://igrealty.phpfogapp.com/ .

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

结合本页上的两个答案,我发现这是可行的。

$args = new WP_Query(array(
  \'post_type\' => \'post\',
  \'posts_per_page\' => -1
));

$loop = new WP_Query($args);

while($loop->have_posts()) {
  the_post();
  $args2 = array(
    \'order\' => \'ASC\',
    \'post_type\' => \'attachment\',
    \'post_parent\' => $post->ID,
    \'post_mime_type\' => \'image\');
    $attachments = get_posts($args2);
    if($attachments) {
      foreach ($attachments as $img_post) {
        if( ((strpos($img_post->guid, \'1.jpg\')!== false) || (strpos($img_post->guid, \'1.gif\')!== false) || (strpos($img_post->guid, \'1.png\')!== false))){
          $stuff = $img_post->guid;
          wp_delete_attachment($img_post->ID);
        } 
      }
    }
} wp_reset_postdata();

SO网友:fuxia

使用run once脚本来清理它。只是一个大纲,没有代码:

获取所有帖子。看见get_posts( array ( \'numberposts\' => -1 ) )get_children( array ( \'post_type\' => \'attachment\', \'numberposts\' => -1 ) )wp_get_attachment_url()$post->post_content):<如果有另一个附件URL具有相同的文件名加上1 和都是帖子内容的一部分,然后先删除第二个图像,然后使用wp_delete_attachment() 删除物理文件。这将删除其他帖子中的所有元数据和所有关联。这是删除附加文件(imho)的最佳方式\'numberposts\' => 50).

SO网友:Lee

此脚本将获取数据库中的所有附件,通过md5将文件相互比较,如果找到重复文件并且文件名末尾有1,则将删除图像:

require(\'wp-load.php\');

global $wpdb;

$img_posts = $wpdb->get_results("SELECT * FROM {$wpdb->prefix}posts WHERE post_type like \'attachment\'");

$img_md5s = array();

foreach($img_posts as $img_post){
  $single_img_md5 = md5_file($img_post->guid);

  if(in_array($single_img_md5, $img_md5s) && ((strpos($img_post->guid, \'1.jpg\')!== false) || (strpos($img_post->guid, \'1.gif\')!== false) || (strpos($img_post->guid, \'1.png\')!== false))){
    wp_delete_attachment($img_post->ID);

  }else{
    $img_md5s[] = $single_img_md5;
  }
} 
只需将其放在根目录中的文件中。

SO网友:jnthnclrk

昨天我学到了一个很有价值的教训,如果应用程序没有为您提供足够的功能来查找和删除数据库中的资产,并且您试图在多个通常是唯一的字段中查找重复项,并且您不确定如何创建复杂的MySQL查询;那么最好的办法就是回到最基本的方面。

最后,我将带有重复项的表导出到Excel中,通过创建自己的重要字段“哈希”对其进行过滤(在MySQL中这样做很复杂,服务器崩溃了几次),并修剪了数据集,以便创建一个ID列表,我绝对确定要删除这些ID。然后,我构建了一个更简单的MySQL查询,以按ID删除每一行。

这种方法非常有效,因为我能够慢慢地考虑我应用的每个Excel过滤器。这样,我就更有信心删除正确的记录。我还在Excel中准确记录了我删除的内容。

结束

相关推荐

where is images/image.jpg?

我被迫在站点上使用SOAP服务,对于一些UI元素,它调用的是我必须放置到位的图像。我无法将它们指向主题文件夹,因为我无法控制HTML,而且我不愿意使用javascript。代码指向<img src=\"images/image.jpg\" >, 我尝试将一个图像文件夹添加到WP安装的根目录中,但没有成功。所以我的问题是,我应该把图像放在哪里,以便HTML可以找到它?