私は自分のプラグインの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が呼び出されたときにカスタム分類が登録されていない場合、プラグインがカスタムデータをクリーンアップできるようにするにはどうすればよいですか。
任意の助けは大歓迎です。
ありがとう。
アンインストールフックを使用することは合法的な うまくいったら になりますが、アンインストールファイルと同じエラーをダンプします。アンインストール機能を実行するためにメインのプラグインファイルをロードするので動作する可能性がより高くなりますが、分類がもう登録されていない場合(アンインストール前に無効にする必要があるため)、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;
}
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);
register_uninstall_hook
を通してあなたのプラグインをアンインストールするときあなたのクリーニング機能を呼び出します