我需要从我的 wordpress 媒体库中删除重复的图像
Posted
技术标签:
【中文标题】我需要从我的 wordpress 媒体库中删除重复的图像【英文标题】:I need to remove duplicate images from my wordpress media library 【发布时间】:2014-04-12 00:22:04 【问题描述】:我正在尝试从我的 wordpress 媒体库中删除重复的图像。
帖子本身不重复,但每个帖子的每个附件图片出现两次。
我环顾四周,但没有人给出明确的答案。有人说使用这样的东西:
<?php
$p = get_posts(array('numberposts'=> -1));
foreach($p as $t)
$s = get_children(array('post_type' => 'attachment', 'numberposts' => -1 ));
foreach ($s as $u)
var_dump($u);
?>
但是好像还是少了点,像这样给我带来了附件列表,但我还是不知道怎么比较。
在我看来,我需要使用一些 sql 查询并直接从数据库中删除媒体文件。不过我不太确定该怎么做。
理论上我需要尝试查找帖子,foreach 帖子获取附件,如果附件文件名 == 文件名则删除文件名。
帮助表示赞赏。
【问题讨论】:
文件不会在数据库中。它们保存在您的 /uploads/ 文件夹中。你有多少个文件? @henrywright 现在它更像是 3000 【参考方案1】:在您的主题文件夹中创建一个文件,然后粘贴第一种或第二种方式的解决方案:
第一种方式(与他们的标题比较 - 推荐):
<?php
require('../../../wp-blog-header.php');
global $wpdb;
$querys = $wpdb->get_results(
"
SELECT a.ID, a.post_title, a.post_type
FROM $wpdb->posts AS a
INNER JOIN (
SELECT post_title, MIN( id ) AS min_id
FROM $wpdb->posts
WHERE post_type = 'attachment'
GROUP BY post_title
HAVING COUNT( * ) > 1
) AS b ON b.post_title = a.post_title
AND b.min_id <> a.id
AND a.post_type = 'attachment'
");
echo "<style>td padding:0 0 10px;</style>";
echo "<h2>DUPLICATES</h2>\n";
echo "<table>\n";
echo "<tr><th></th><th>Title</th><th>URL</th></tr>\n";
foreach ( $querys as $query )
$attachment_url = wp_get_attachment_url($query->ID);
$delete_url = get_delete_post_link($query->ID);
$delete_url = get_delete_post_link($query->ID);
echo "<tr>
<td><a style=\"color: #FFF;background-color: #E74C3C;text-decoration: none;padding: 5px;\" target=\"_blank\" href=\"".$delete_url."\">DELETE</a></td>
<td>".get_the_title($query->ID)."</td>
<td><a href=\"".$attachment_url."\">".$attachment_url."</a></td>
</tr>\n";
echo "</table>";
?>
第二种方式(与他们的网址比较) 它的工作方式是,它会相互检查每个文件。因此,如果您有像 file.jpg 和 file1.jpg 这样的文件,那么它会将它们作为重复项捕获。此外,如果您有像 file1.jpg 和 file11.jpg 这样的文件,那么即使它们可能是完全不同的文件,它也会将它们视为重复文件。 :
<?php
require('../../../wp-blog-header.php');
$args = array(
'post_type' => 'attachment',
'numberposts' => -1,
'orderby' => 'name',
'order' => 'ASC',
'post_status' => null,
'post_parent' => null, // any parent
);
$newArray = array();
$attachments = get_posts($args);
$attachments2 = $attachments;
if ($attachments)
foreach($attachments as $post)
$attachment_url = wp_get_attachment_url($post->ID);
$delete_url = get_delete_post_link($post->ID);
$newArray[] = array("att_url" => $attachment_url, "del_url" => $delete_url);
echo "<table>";
$newArray2 = $newArray;
echo "<tr><td><h2>DUPLICATES</h2></td></tr>";
foreach($newArray as $url1)
$url_del = $url1['del_url'];
$url1 = $url1['att_url'];
$url11 = substr($url1,0,strrpos($url1,"."));
foreach($newArray2 as $url2)
$url2 = $url2['att_url'];
$url2 = substr($url2,0,strrpos($url2,".") - 1);
if($url2 == $url11)
echo "<tr><td><a href=\"".$url_del."\">DELETE</a></td><td><a href=\"".$url1."\">".$url1."</a></td></tr>";
echo "</table>";
echo "<table>";
echo "<tr><td><h2>ALL ATTACHMENTS</h2></td></tr>";
foreach($attachments as $tst1)
echo "<tr><td>".$tst1->guid."</td></tr>";
echo "</table>";
?>
然后尝试在浏览器中访问该文件,它会显示所有重复项的列表。
【讨论】:
以上是关于我需要从我的 wordpress 媒体库中删除重复的图像的主要内容,如果未能解决你的问题,请参考以下文章