MySql `DELETE` syntax is not very different fiom `SELECT`, so you can delete from multiple tables using a single query. Taxonomies informations in WordPress are in 3 tables: - `wp_terms` - `wp_term_taxonomy` - `wp_term_relationships` the first 2 contain term / taxonomy informations, the 3rd contains association between terms and posts. The query to delete **all** tags from WordPress db is: 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' Note that the prefix `wp_` can be different in your setup, it depends on `$table_prefix` setting on your `wp_config.php` file. More info [here][1]. Be sure to replace the prefix with correct value in the query for all the 3 tables. Also note that on [**multisite**][2] install, the full table name is $prefix . $blogid . '_' . $tablename` e.g. if the prefix is the default `'wp_'` the blog is 2, the 3 tables will be named: - `wp_2_terms` - `wp_2_term_relationships` - `wp_2_term_taxonomy` More info [here][3]. Finally, please, **be sure to have a full, valid database backup before running such a query**. The query can be ran using a database admin tool like [phpMyAdmin][4]. Running query via php is simple in one side, because using WordPress [`$wpdb`][5] class, **table names are auto-resolved**, but is a harder in another side, because you have to prevent the query run multiple times, you have to check user capabilities and you need to edit php files. Following code use a [transient][6] to ensure that function run once, and also run it only when a super admin is logged in backend using [`is_super_admin()`][7]. 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; } [1]: http://codex.wordpress.org/Editing_wp-config.php#table_prefix [2]: http://codex.wordpress.org/Create_A_Network [3]: http://codex.wordpress.org/Database_Description#Site_Specific_Tables [4]: http://www.phpmyadmin.net/home_page/index.php [5]: https://codex.wordpress.org/Class_Reference/wpdb [6]: https://codex.wordpress.org/Transients_API [7]: https://codex.wordpress.org/Function_Reference/is_super_admin