我刚刚将一个较大的WP博客从MediaTemple导出到PHPFog。
我使用了标准的WordPress导出和导入插件。
不知什么原因,我的所有媒体资产都被复制了。我现在每篇文章有两倍多的图片。
如果一个原始文件名为“Lot-44-Warrens.jpg”,那么它现在有一个副本名为“Lot-44-Warrens1.jpg”,这两个文件都附在同一个帖子上。
我现在在大约250多篇文章中有许多重复的图像。
因此,我的问题是如何从媒体库和帖子中删除上述副本?
我试图用“*1.jpg”搜索媒体库,但没有成功。
寻找一个简洁的解决方案,这并不意味着手动删除每个重复。
也许我可以运行一个MySQL查询来删除库和帖子中的重复项?
所讨论的网站是:http://igrealty.phpfogapp.com/ .
最合适的回答,由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网友: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;
}
}
只需将其放在根目录中的文件中。