尝试了解如何使用SQL/$wpdb->;查询以从分类中删除与特定帖子ID相关的所有术语。下面的内容很好地删除了特定分类法中的所有术语,但我需要对其进行修改,以便只删除与所提到的特定post id关联的术语。
// Clear Terms from Taxonomy \'post_tag\'
DELETE t, tr, tt
FROM wp_terms t
INNER JOIN wp_term_taxonomy tt ON t.term_id = tt.term_id
INNER JOIN wp_term_relationships tr ON tt.term_taxonomy_id = tr.term_taxonomy_id
WHERE tt.taxonomy = \'post_tag\'
我还使用以下方法删除帖子(效果很好):
// Delete Posts
$wpdb->query( "DELETE FROM $wpdb->posts WHERE ID IN (".implode( ", ", $postIds ).")" );
我尝试了以下操作,但没有清除关联的术语,它们只是在DB中保持孤立状态,只是清除了关系。
// Delete Post Terms
$wpdb->query( "DELETE FROM wp_term_relationships WHERE object_id IN (".implode( ", ", $postIds ).")" );
我是SQL的新手,非常感谢您的帮助,提前谢谢!
最合适的回答,由SO网友:mozboz 整理而成
因此,如果您确定要删除实际术语以及将术语分配给帖子的关系,则可以这样做(已测试并适用于我):
delete term from wpterm_taxonomy term, wpterm_relationships rel
where term.term_taxonomy_id = rel.term_taxonomy_id and rel.object_id IN (1) ;
显然,用你选择帖子ID的方式来替换那里的“1”
我强烈建议您在运行之前进行测试,例如,此查询将显示在您执行此操作之前将删除哪些术语!并在进行大规模删除之前进行数据库备份,以防出错;-)
select term.term_taxonomy_id from wpterm_taxonomy term, wpterm_relationships rel
where term.term_taxonomy_id = rel.term_taxonomy_id and rel.object_id IN (1) ;
再次将“1”替换为创建帖子ID列表的方式