問題描述
我剛從 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 輔助翻譯的英文資料結果。如果您對結果不滿意,可以加入我們改善翻譯效果:薇曉朵技術論壇。