問題描述
我剛從 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 指令碼進行清理。只是一個大綱,沒有程式碼:
-
獲取所有帖子參見
get_posts( array ( 'numberposts' => -1 ) ) -
為每個帖子獲取所有附件。參見
get_children( array ( 'post_type' => 'attachment', 'numberposts' => -1 ) ) -
每個附件獲取附件 URL 。參見
wp_get_attachment_url() -
如果您在父帖子的內容 (
$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 輔助翻譯的英文資料結果。如果您對結果不滿意,可以加入我們改善翻譯效果:薇曉朵技術論壇。