web-dev-qa-db-ja.com

フロントエンドからユーザーを削除

こんにちは私はユーザーが彼のアカウントを削除することができなければならないフロントエンド管理者に取り組んでいます。 current_user()は私のカスタムメイドの機能で、ユーザーのメタデータを取得します。

私がこの仕事をする方法を誰かが知っていますか?

echo '<a class="remove" href="' . get_permalink() . '?remove_account">' . __( 'Click here to remove your account' ) . '</a>';

// Remove account
function terminate_account() {
    require_once( ABSPATH . 'wp-admin/includes/user.php' );
    wp_delete_user( current_user( 'ID' ) );
}

if( isset( $_GET['remove_account'] ) ) {
    add_action( 'init', 'terminate_account' );
}
2
Robbert

wp_delete_userのドキュメント の形式に直接なります。

if(is_user_logged_in() && !empty($_GET['DeleteMyAccount'])) {
    add_action('init', 'remove_logged_in_user');
}

function remove_logged_in_user() {
    require_once(ABSPATH.'wp-admin/includes/user.php' );
    $current_user = wp_get_current_user();
    wp_delete_user( $current_user->ID );
}

注意事項:

  • あなたのコードはユーザーがログインしたかどうかをチェックしませんでした
  • ユーザー削除リンクを印刷するときには、initアクションは既に実行されて終了しているので、ユーザー削除は機能しません。コードのその部分は以前に実行する必要があります、functions.phpまたはプラグインで言う

編集:

これをテーマ関数ファイルに入れることができれば:

add_action('init', 'remove_logged_in_user');

function remove_logged_in_user() {
    require_once(ABSPATH.'wp-admin/includes/user.php' );
    $current_user = wp_get_current_user();
    $success = wp_delete_user( $current_user->ID );
    wp_die('wp delete gave: <pre>"'.print_r($success).'"</pre>');
}
1
Tom J Nowell