【问题标题】:Delete wp tags from an array correctly正确删除数组中的 wp 标签
【发布时间】:2016-08-23 01:51:20
【问题描述】:

我需要定期从我的 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 并帮助更好地回答这个问题。

【问题讨论】:

    标签: php mysql wordpress tags


    【解决方案1】:

    您应该使用 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 );
    }
    

    【讨论】:

      【解决方案2】:

      好的!我得到了这个工作,我希望这对其他人有用。不过,我还有一些问题:

      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 ) );
           }
        }
        

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2012-10-30
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-10-30
        • 2019-12-27
        • 2011-01-06
        相关资源
        最近更新 更多