使用MySQL删除海量标签 时间:2014-04-24 作者:rakibtg 我正在使用WordPress 3.4.2 对于我的一个站点,当前38,251 标签现在我想从我的站点中删除所有标记,那么哪种方法可以更安全地截断我的站点上的所有标记。 1 个回复 SO网友:gmazzap MySqlDELETE 语法与fiom差别不大SELECT, 因此,您可以使用单个查询从多个表中删除。WordPress中的分类信息包含在3个表中:wp_termswp_term_taxonomywp_term_relationships前两个包含术语/分类信息,第三个包含术语和帖子之间的关联。要删除的查询all WordPress db中的标记为: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\' 请注意,前缀wp_ 您的设置可能会有所不同,具体取决于$table_prefix 设置您的wp_config.php 文件更多信息here.确保在所有3个表的查询中使用正确的值替换前缀。另请注意,在multisite 安装时,完整表名为$prefix . $blogid . \'_\' . $tablename` 例如,如果前缀是默认值\'wp_\' 日志为2,3个表将命名为:wp_2_termswp_2_term_relationshipswp_2_term_taxonomy 更多信息here.最后,请,be sure to have a full, valid database backup before running such a query.可以使用数据库管理工具运行查询,如phpMyAdmin.一方面,通过php运行查询很简单,因为使用WordPress$wpdb 班table names are auto-resolved, 但在另一方面则更难,因为必须防止查询多次运行,必须检查用户功能,并且需要编辑php文件。以下代码使用transient 确保函数只运行一次,并且仅当超级管理员使用is_super_admin().add_action(\'admin_init\', function() { if ( ! is_super_admin() ) return; if ( get_transient(\'tags_cleaned\') ) return; add_action( \'shutdown\', \'my_clean_tags\' ); }); function my_clean_tags() { if ( ! is_super_admin() ) return; if ( get_transient(\'tags_cleaned\') ) return; remove_action( current_filter(), __FUNCTION__ ); global $wpdb; $q = " DELETE t, tr, tt FROM {$wpdb->terms} t INNER JOIN {$wpdb->term_taxonomy} tt ON t.term_id = tt.term_id INNER JOIN {$wpdb->term_relationships} tr ON tt.term_taxonomy_id = tr.term_taxonomy_id WHERE tt.taxonomy = \'post_tag\' "; $result = $wpdb->query( $q ); set_transient(\' tags_cleaned\', $result ); return $result; } 结束 文章导航