无法删除共享相同插件的类别和标签

时间:2014-01-12 作者:scrineym

在我的wordpress网站上,我有一个带有蛞蝓(anim)的类别(例如动物)和一个带有名称(anims)的标签(带有相同的蛞蝓(anim)。

我的问题是,我想删除类别,但保留标记。但是,每当我尝试更改类别中的任何设置时,标记也会更改(例如,当我将类别slug更改为anim old时,标记的slug也会更改)。

这似乎与他们有着相同的鼻涕虫这一事实有关wordpress认为他们是一样的。

是否有任何方法(即使在使用sql的数据库中)取消类别和标记的链接,以便我可以删除类别?

1 个回复
最合适的回答,由SO网友:gmazzap 整理而成

问题是分类法的WordPress数据库模式。在数据库中,具有相同slug的两个不同分类中的两个术语共享术语表中的同一行。它们在terms\\u taxonomy表中有两行进行区分。

因此,如果只想删除类别,则必须在WordPress数据库上执行自定义sql。

我为pourpose编写了一个函数:

function delete_slug_sharing_term( $slug = \'\', $taxonomy = \'category\' ) {
  $term = get_term_by( \'slug\', sanitize_title($slug), $taxonomy );
  if ( empty($term) || is_wp_error($term) ) return FALSE;
  global $wpdb;
  $q = "DELETE FROM $wpdb->term_taxonomy 
       WHERE taxonomy = %s 
       AND term_taxonomy_id = %d";
  return (bool) $wpdb->query( $wpdb->prepare( $q, $taxonomy, $term->term_taxonomy_id) );
}
这样使用:

delete_slug_sharing_term( \'animals\', \'category\' );
你需要打电话only once, 因此,放在某个地方(可能在“admin\\u init”上),在仪表板上检查类别是否已删除,如果已删除,请删除函数调用(如果需要,也可以删除函数)。

结束