2016-08-23 9 views
2

私のwpテーブルからいくつかのタグを定期的に削除する必要があります。今私は、この使用しています:アレイからwpタグを正しく削除する

DELETE FROM wp_terms WHERE slug = 'tag-to-delete'; 

をしかし、私は、私はまた、用語とすべての関係を削除しなければならないと思うので、私はこれをやっている方法は、右、正しくないと仮定しますか?

さらに、私はfunctions.phpを使ってタグを配列内に配置することでこれを行う必要があります。例:$tags_to_delete = tag1, tag2, tag3;

functions.phpでこれを行うことはできますか?もしそうなら、誰かが私にそれを行う正しい方法を説明することができますか?

編集:私はthis solutionを管理してきましたが、私はまだいくつかの質問を持っているので、これは最終的な解決策ではないかもしれない:

  1. が使用して、これは安全ですか?
  2. クエリが正しいか、改善できますか?
  3. 削除されたタグの数を返す方法はありますか?
  4. これを行う方法は他にありますか?

my solution bellowを参照して、この質問に対するより良い回答をお手伝いしてください。

答えて

0

OK!私はこれを働かせて、これが他の誰にとっても役立つことを願っています。それでも、いくつか質問があります:

  1. これは安全に使用できますか?
  2. クエリが正しいか、改善できますか?
  3. 削除されたタグの数を返す方法はありますか?
  4. これを行う方法は他にありますか?

    $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)); 
        } 
    } 
    
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); 
} 
関連する問題