我想将功能添加到以下代码中,以便它还删除具有相同元键值的帖子。换句话说,有一个元键' source_link'我想删除' source_link'中具有相同值的重复项。 这是当前的代码:
$wpdb->query("
DELETE double_posts.*
FROM $wpdb->posts as double_posts
INNER JOIN (
SELECT post_title, MIN(id) as min_id
FROM $wpdb->posts
WHERE (post_status = 'publish'
AND post_type = 'post')
OR (post_status = 'published'
AND post_type = 'post')
GROUP BY post_title
HAVING COUNT(*) > 1
) AS orig_posts ON orig_posts.post_title = double_posts.post_title
AND orig_posts.min_id <> double_posts.id
");
目前,jsut会删除帖子标题重复的帖子。我想保留它,然后通过重复的元键值添加删除。这里的任何帮助都会很棒!感谢。
答案 0 :(得分:0)
您的内部查询仅获取MIN(id)
,这意味着您的删除中只会包含可能有多个重复项中的一个。还有几种方法 - 如果你想强制执行它,你可以考虑一个数据库唯一键索引。
确保在运行这些查询之前备份数据库,以防出现问题。
要按post_title
删除所有重复项:
DELETE p1
FROM
{$wpdb->posts} p1,
{$wpdb->posts} p2
WHERE
p1.ID > p2.ID
AND p1.post_title = p2.post_title
按重复meta_key
删除所有帖子:
DELETE p, pm1
FROM
{$wpdb->posts} p,
{$wpdb->postmeta} pm1,
{$wpdb->postmeta} pm2
WHERE
p.ID = pm1.post_id
AND pm1.post_id > pm2.post_id
AND pm1.meta_key = 'source_link'
AND pm1.meta_key = pm2.meta_key
AND pm1.meta_value = pm2.meta_value