web-dev-qa-db-ja.com

プラグインのuninstall.phpの中のカスタムの分類用語を削除するにはどうすればいいですか?

私は自分のプラグインのuninstall.phpファイルを書いていて、プラグインのカスタム分類法で作成されたすべての用語を削除したいと思います。

プラグインのuninstall.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_termsは "invalid taxonomy"に対してエラーを返すので、このようにカスタム用語を削除することはできない。 。

Uninstall.phpが呼び出されたときにカスタム分類が登録されていない場合、プラグインがカスタムデータをクリーンアップできるようにするにはどうすればよいですか。

任意の助けは大歓迎です。

ありがとう。

4
edeneye

アンインストールフックを使用することは合法的な うまくいったら になりますが、アンインストールファイルと同じエラーをダンプします。アンインストール機能を実行するためにメインのプラグインファイルをロードするので動作する可能性がより高くなりますが、分類がもう登録されていない場合(アンインストール前に無効にする必要があるため)、WPは使用できません。 get_terms

この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;                 
} 
5
brasofilo

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);
4
edeneye

register_uninstall_hook を通してあなたのプラグインをアンインストールするときあなたのクリーニング機能を呼び出します

0
Ivan Hanák