如何在插件的uninstall.php中删除自定义分类术语?

时间:2013-10-17 作者:edeneye

我正在编写插件的卸载。php文件,并希望它删除插件自定义分类法中创建的任何术语。

在插件的卸载中。我正在使用的php文件:

// Delete all custom terms for this taxonomy
$terms = get_terms(\'custom_taxonomy\');
foreach ($terms as $term) {
    wp_delete_term( $term->ID, \'custom_taxonomy\' );
}
问题似乎是此时未注册自定义分类法,因此get\\u terms会返回“无效分类法”错误,因此我无法以这种方式删除自定义术语,这似乎是最简单的方法。

如果卸载时未注册自定义分类法。php被称为,我如何拥有它,以便我的插件能够清理它的自定义数据?

非常感谢您的帮助。

谢谢

3 个回复
最合适的回答,由SO网友:brasofilo 整理而成

使用卸载挂钩是合法的if it worked, 但它会转储与卸载文件相同的错误。当它加载主插件文件以执行卸载功能时,它将有更多的机会工作,但如果分类法不再注册(并且不再注册,因为我们需要在卸载之前停用),WP将无法使用get_terms.

调整以下功能this Stack Overflow answer 应完成以下工作:

function load_terms($taxonomy){
    global $wpdb;
    $query = \'SELECT DISTINCT 
                                t.name 
                            FROM
                                `wp-cls`.wp_terms t 
                            INNER JOIN 
                                `wp-cls`.wp_term_taxonomy tax 
                            ON 
                             `tax`.term_id = `t`.term_id
                            WHERE 
                                ( `tax`.taxonomy = \\\'\' . $taxonomy . \'\\\')\';                     
    $result =  $wpdb->get_results($query , ARRAY_A);
    return $result;                 
} 

SO网友:edeneye

根据brasofilo的输入,我最终做了如下工作:

function delete_custom_terms($taxonomy){
    global $wpdb;

    $query = \'SELECT t.name, t.term_id
            FROM \' . $wpdb->terms . \' AS t
            INNER JOIN \' . $wpdb->term_taxonomy . \' AS tt
            ON t.term_id = tt.term_id
            WHERE tt.taxonomy = "\' . $taxonomy . \'"\';

    $terms = $wpdb->get_results($query);

    foreach ($terms as $term) {
        wp_delete_term( $term->term_id, $taxonomy );
    }
}

// Delete all custom terms for this taxonomy
delete_custom_terms(LISTING_TAXONOMY);

SO网友:Ivan Hanák

通过以下方式卸载插件时调用清理功能register_uninstall_hook

结束