2013-11-23 46 views
0

我需要从我的wordpress数据库中的自定义帖子类型中删除_thumbnail_id元键值数据。我发现这个代码可以让我从一切中删除它,但我不希望它从我的帖子中删除它,只是我的自定义帖子类型称为“svg”,任何人都可以帮助我调整代码来执行此操作?从所有自定义帖子类型中删除_thumbnail_id

global $wpdb; 

$attachments = $wpdb->get_results(" 
SELECT * 
FROM $wpdb->postmeta 
WHERE meta_key = '_thumbnail_id' 
"); 

foreach ($attachments as $attachment) { 
wp_delete_attachment($attachment->meta_value, true); 
} 

$wpdb->query(" 
DELETE FROM $wpdb->postmeta 
WHERE meta_key = '_thumbnail_id' 
"); 

或者,如果你们知道一个更好的方式来删除刚刚SVG职位_thumbnail metakey让我知道,因为我有400多个职位的SVG和无法通过每一个去。

回答

0

你在找这样的吗?

DELETE m 
    FROM wp_postmeta m JOIN wp_posts 
    ON m.post_id = p.id 
WHERE p.post_type = 'svg' 
    AND meta_key = '_thumbnail_id' 

注:试图删除任何东西,确保你有你的数据库的可靠的备份,以防万一之前。

+0

谢谢,我到底会在哪里添加?我的功能页面? – Greenhoe

+0

如果它是一次性的东西,那么只需在任何mysql客户端:mysql,phpMyAdmin,SequelPro,...你有什么。 – peterm

+0

我得到错误“表'shokzgui_GuideWP.postmeta'不存在”当我尝试运行在SequelPro的查询也postmeta表被称为wp_postmeta所以我改变任何东西或是吗? – Greenhoe

0

首先,你的代码将先删除所有附件,然后清洁(不仅能清洁_thumbnail_id) -

总之,在一般的线条,这样的事情应该工作:

SELECT FROM 'wp_posts', WHERE 'post_type' = 'my_post_type' 
    INNER JOIN 'wp_postmeta' ON 'wp_post.post_id' = 'wp_postmeta.post_id' 
    AND 'meta_key'='my_meta_key' 
// AND 'meta_value'= my_value'// this line only if needed ... 
    • 备份你的数据库。 我对此行为不承担任何责任。
    • 变化SELECT核查后DELETE ...
    • 最后一行是仅用于演示,你的情况,我想你不需要它 - 那么相应删除。 。
相关问题