2016-08-23 3 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); 
} 
관련 문제