我需要定期从wp表中删除一些标记。现在我用这个:
DELETE FROM wp_terms WHERE slug = 'tag-to-delete';
但我想我这样做的方式并不正确,因为我认为我必须删除与该术语的所有关系,对吗?
此外,我需要通过将标签放在数组中来通过functions.php来完成此操作。例如:$tags_to_delete = tag1, tag2, tag3;
是否可以通过functions.php执行此操作?如果是这样,有人能解释我正确的方法吗?
已编辑:我已经管理this solution,但这可能不是最终解决方案,因为我仍然有一些问题:
请参阅my solution bellow并帮助更好地回答这个问题。
答案 0 :(得分:0)
您应该使用WordPress功能删除它们。他们会自动清理关系:
$tag = get_term( $tag_name, $taxonomy );
if ( ! $tag || is_wp_error( $tag ) ) {
echo 'cant find the tag: ' . $tag_name ;
} else {
wp_delete_term( $tag->term_id, $taxonomy );
}
答案 1 :(得分:0)
OK!我得到了这个工作,我希望这对任何人都有用。不过,我还有一些问题:
还有其他办法吗?
$all_terms = array( 'tag number one', 'tag number two', );
foreach ( $all_terms as $term ) {
$terms = $wpdb->get_row( "SELECT t.*, tt.* FROM $wpdb->terms AS t INNER JOIN $wpdb->term_taxonomy AS tt ON t.term_id = tt.term_id WHERE t.name IN ('".$term."') AND tt.taxonomy = 'post_tag' ORDER BY t.name ASC" );
if( !empty( $terms ) ) {
$wpdb->delete( $wpdb->term_taxonomy, array( 'term_taxonomy_id' => $terms->term_taxonomy_id ) );
$wpdb->delete( $wpdb->terms, array( 'term_id' => $terms->term_id ) );
}
}