問題描述

我剛從 MediaTemple 導出了一個很大的 WP 博客到 PHPFog 。

我使用標準的 WordPress 導出和導入插件。

由於一些未知的原因,我的所有媒體資產都被重複。我現在每個帖子的圖像數量是兩倍。

如果一個原始文件被稱為”Lot-44-Warrens.jpg” 它現在有一個重複名為”Lot-44-Warrens1.jpg” 這兩個文件都附加到同一個文章。

我現在有大約 250 多個帖子中有很多重複的圖片。

所以我的問題是如何從媒體庫和帖子中刪除所述重複的內容?

我試圖用”*1.jpg” 搜索媒體庫,但它沒有工作。

尋找一個整潔的解決方案,並不意味着手動刪除每個 dupe 。

也許有一個 MySQL 查詢我可以運行從 Library 和帖子中刪除重複?

該網站是:http://igrealty.phpfogapp.com/

最佳解決方法

結合這個頁面上的兩個答案,我發現這是有效的。

$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();

次佳解決方法

使用 run-once 腳本進行清理。只是一個大綱,沒有代碼:

  1. 獲取所有帖子參見 get_posts( array ( 'numberposts' => -1 ) )

  2. 為每個帖子獲取所有附件。參見 get_children( array ( 'post_type' => 'attachment', 'numberposts' => -1 ) )

  3. 每個附件獲取附件 URL 。參見 wp_get_attachment_url()

  4. 如果您在父帖子的內容 ($post->post_content) 中找到附件網址:

    • 如果有另一個具有相同文件名的附件 URL 加上 1

    • 兩者都是帖子內容的一部分

    • 先刪除第二張圖片

    • 使用 wp_delete_attachment()刪除物理文件。這將刪除其他帖子中的所有元數據和所有關聯。這是刪除附件文件 (imho) 的最佳方法。

可能還要等一下。在您的網站的本地副本上測試。也許你應該以 50 個帖子 ('numberposts' => 50) 的步驟運行該過程。

第三種解決方法

該腳本將抓取數據庫中的所有附件,通過 md5 將文件彼此進行比較,如果它找到重複文件,並且在文件名末尾有一個,它將刪除該圖像:

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;
  }
}

只需將其放在根目錄中的文件中即可。

參考文獻

注:本文內容整合自 Google/Baidu/Bing 輔助翻譯的英文資料結果。如果您對結果不滿意,可以加入我們改善翻譯效果:薇曉朵技術論壇。