ユーザーが自分のウェブサイトに登録したときに、 "tips_username"という名前のポートフォリオカテゴリを作成するために次の関数を使用しています。
add_action('user_register', 'auto_create_traveltip_category');
function auto_create_traveltip_category($user_id) {
$tip_category_name = 'tips_' . $_POST['user_login'];
wp_insert_term($tip_category_name, 'portfolio_entries', array(
'description' => 'Travel Tip for ' . $_POST['user_login'],
'slug' => 'tips-' . $_POST['user_login'],
'parent' => '',
)
);
}
これはうまく機能していますが、今度はユーザーを削除したときに自動的にカテゴリを削除する機能が必要になります。私は https://codex.wordpress.org/Plugin_API/Action_Reference/delete_user からインスピレーションを得て次の関数を実装しました。
function delete_traveltip_category_with_user($user_id) {
global $wpdb;
$user_obj = get_userdata($user_id);
$tip_cat_name = 'tips_' . $user_obj->user_login;
$tip_cat_desc = get_term_by('name', $tip_cat_name, 'portfolio_entries');
$tip_cat_id = $tip_cat_desc->term_id;
wp_delete_term( $tip_cat_id, 'portfolio_entries' );
}
add_action( 'delete_user', 'delete_traveltip_category_with_user' );
残念ながらそれは機能していません。ご覧になって、何が問題なのか教えてください。ありがとうございます。
delete_user
アクションには、$id
と$reassign
の2つのパラメーターがあります。そのため、フックには2つのパラメータを指定する必要があります。sanitize_term()
と sanitize_user()
は、'tips_' . $_POST['user_login']
と'tips_' . $user_obj->user_login
という異なる方法で文字列をサニタイズするからです。常に同じ文字列ではありません。そのため、用語を挿入するときは'tips_' . sanitize_user($_POST['user_login')
を用語名として使用するほうが良いでしょう。