WEB制作、マーケティングに関する情報をお届けします。ホームページ制作会社、テラのブログ

ワードプレスのユーザー退会ページの作成と退会理由を取得する方法

会員制サイトを構築した際にユーザー自ら退会できるページの作成が必要になる場合があります。
また、同時に退会の理由などのアンケートを取りたい場合もあります。
そこで今回は『ワードプレスのユーザー退会ページの作成と退会理由を取得する方法』を紹介します。

コードを紹介

ファイル名はpage-cancel.php、ワードプレスの固定ページ作成からテンプレート名、Cancelを選んで作成することを想定しています。

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
<?php
// フォームが送信されたか確認
if ( isset( $_POST['cancel_subscription'] ) ) {
// 退会理由を取得
$cancel_reason = sanitize_text_field( $_POST['cancel_reason'] );
$detailed_reason = sanitize_textarea_field( $_POST['detailed_reason'] );
// 退会理由を記録 (例: ユーザーメタデータに保存)
update_user_meta( $current_user->ID, 'cancel_reason', $cancel_reason );
update_user_meta( $current_user->ID, 'detailed_reason', $detailed_reason );
// 管理者権限がない場合でも自分自身を削除
if ( $current_user->ID > 0 ) {
require_once( ABSPATH . 'wp-admin/includes/user.php' ); // ユーザー削除に必要なファイルをインクルード
wp_delete_user( $current_user->ID );
}
// 退会後のリダイレクト先URL
wp_redirect( home_url( '/goodbye/' ) );
}
/* Template Name: Cancel */
get_header();
?>
<?php
// ユーザーがログインしているか確認
if ( ! is_user_logged_in() ) {
wp_redirect( home_url() );
exit;
}
$current_user = wp_get_current_user();
?>
<h2>退会手続き</h2>
<form method="post" action="">
<p>退会理由をお聞かせください:</p>
<label>
<input type="radio" name="cancel_reason" value="イメージしていたものと違った" required>
イメージしていたものと違った
</label><br>
<label>
<input type="radio" name="cancel_reason" value="利用しなくなった" required>
利用しなくなった
</label><br>
<label>
<input type="radio" name="cancel_reason" value="通知が多すぎる" required>
通知が多すぎる
</label><br>
<label>
<input type="radio" name="cancel_reason" value="そのほか" required>
そのほか
</label><br>
<label>
<input type="radio" name="cancel_reason" value="回答しない" required>
回答しない
</label><br>
<p>もしよろしければ退会理由を詳しくお聞かせください:</p>
<textarea name="detailed_reason" rows="4" cols="50"></textarea><br><br>
<button type="submit" name="cancel_subscription">退会する</button>
</form>
<?php
get_footer();
<?php // フォームが送信されたか確認 if ( isset( $_POST['cancel_subscription'] ) ) { // 退会理由を取得 $cancel_reason = sanitize_text_field( $_POST['cancel_reason'] ); $detailed_reason = sanitize_textarea_field( $_POST['detailed_reason'] ); // 退会理由を記録 (例: ユーザーメタデータに保存) update_user_meta( $current_user->ID, 'cancel_reason', $cancel_reason ); update_user_meta( $current_user->ID, 'detailed_reason', $detailed_reason ); // 管理者権限がない場合でも自分自身を削除 if ( $current_user->ID > 0 ) { require_once( ABSPATH . 'wp-admin/includes/user.php' ); // ユーザー削除に必要なファイルをインクルード wp_delete_user( $current_user->ID ); } // 退会後のリダイレクト先URL wp_redirect( home_url( '/goodbye/' ) ); } /* Template Name: Cancel */ get_header(); ?> <?php // ユーザーがログインしているか確認 if ( ! is_user_logged_in() ) { wp_redirect( home_url() ); exit; } $current_user = wp_get_current_user(); ?> <h2>退会手続き</h2> <form method="post" action=""> <p>退会理由をお聞かせください:</p> <label> <input type="radio" name="cancel_reason" value="イメージしていたものと違った" required> イメージしていたものと違った </label><br> <label> <input type="radio" name="cancel_reason" value="利用しなくなった" required> 利用しなくなった </label><br> <label> <input type="radio" name="cancel_reason" value="通知が多すぎる" required> 通知が多すぎる </label><br> <label> <input type="radio" name="cancel_reason" value="そのほか" required> そのほか </label><br> <label> <input type="radio" name="cancel_reason" value="回答しない" required> 回答しない </label><br> <p>もしよろしければ退会理由を詳しくお聞かせください:</p> <textarea name="detailed_reason" rows="4" cols="50"></textarea><br><br> <button type="submit" name="cancel_subscription">退会する</button> </form> <?php get_footer();
<?php

// フォームが送信されたか確認
if ( isset( $_POST['cancel_subscription'] ) ) {
    // 退会理由を取得
    $cancel_reason = sanitize_text_field( $_POST['cancel_reason'] );
    $detailed_reason = sanitize_textarea_field( $_POST['detailed_reason'] );
    
    // 退会理由を記録 (例: ユーザーメタデータに保存)
    update_user_meta( $current_user->ID, 'cancel_reason', $cancel_reason );
    update_user_meta( $current_user->ID, 'detailed_reason', $detailed_reason );

    // 管理者権限がない場合でも自分自身を削除
    if ( $current_user->ID > 0 ) {
        require_once( ABSPATH . 'wp-admin/includes/user.php' ); // ユーザー削除に必要なファイルをインクルード
        wp_delete_user( $current_user->ID );
    }

    // 退会後のリダイレクト先URL
    wp_redirect( home_url( '/goodbye/' ) );
}

/* Template Name: Cancel */
get_header();
?>

<?php
// ユーザーがログインしているか確認
if ( ! is_user_logged_in() ) {
    wp_redirect( home_url() );
    exit;
}

$current_user = wp_get_current_user();
?>

<h2>退会手続き</h2>
<form method="post" action="">
    <p>退会理由をお聞かせください:</p>
    
    <label>
        <input type="radio" name="cancel_reason" value="イメージしていたものと違った" required>
        イメージしていたものと違った
    </label><br>
    
    <label>
        <input type="radio" name="cancel_reason" value="利用しなくなった" required>
        利用しなくなった
    </label><br>
    
    <label>
        <input type="radio" name="cancel_reason" value="通知が多すぎる" required>
        通知が多すぎる
    </label><br>
    
    <label>
        <input type="radio" name="cancel_reason" value="そのほか" required>
        そのほか
    </label><br>
    
    <label>
        <input type="radio" name="cancel_reason" value="回答しない" required>
        回答しない
    </label><br>

    <p>もしよろしければ退会理由を詳しくお聞かせください:</p>
    <textarea name="detailed_reason" rows="4" cols="50"></textarea><br><br>

    <button type="submit" name="cancel_subscription">退会する</button>
</form>

<?php

get_footer();

コードを解説

HTMLのパーツについて

退会理由の取得と退会の実行にはフォームを使用します。
formのラジオボタン、入力項目、submitボタンにはそれぞれname属性を振っておきます。

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
<form method="post" action="">
<p>退会理由をお聞かせください:</p>
<label>
<input type="radio" name="cancel_reason" value="イメージしていたものと違った" required>
イメージしていたものと違った
</label><br>
<label>
<input type="radio" name="cancel_reason" value="利用しなくなった" required>
利用しなくなった
</label><br>
<label>
<input type="radio" name="cancel_reason" value="通知が多すぎる" required>
通知が多すぎる
</label><br>
<label>
<input type="radio" name="cancel_reason" value="そのほか" required>
そのほか
</label><br>
<label>
<input type="radio" name="cancel_reason" value="回答しない" required>
回答しない
</label><br>
<p>もしよろしければ退会理由を詳しくお聞かせください:</p>
<textarea name="detailed_reason" rows="4" cols="50"></textarea><br><br>
<button type="submit" name="cancel_subscription">退会する</button>
</form>
<form method="post" action=""> <p>退会理由をお聞かせください:</p> <label> <input type="radio" name="cancel_reason" value="イメージしていたものと違った" required> イメージしていたものと違った </label><br> <label> <input type="radio" name="cancel_reason" value="利用しなくなった" required> 利用しなくなった </label><br> <label> <input type="radio" name="cancel_reason" value="通知が多すぎる" required> 通知が多すぎる </label><br> <label> <input type="radio" name="cancel_reason" value="そのほか" required> そのほか </label><br> <label> <input type="radio" name="cancel_reason" value="回答しない" required> 回答しない </label><br> <p>もしよろしければ退会理由を詳しくお聞かせください:</p> <textarea name="detailed_reason" rows="4" cols="50"></textarea><br><br> <button type="submit" name="cancel_subscription">退会する</button> </form>
<form method="post" action="">
    <p>退会理由をお聞かせください:</p>
    
    <label>
        <input type="radio" name="cancel_reason" value="イメージしていたものと違った" required>
        イメージしていたものと違った
    </label><br>
    
    <label>
        <input type="radio" name="cancel_reason" value="利用しなくなった" required>
        利用しなくなった
    </label><br>
    
    <label>
        <input type="radio" name="cancel_reason" value="通知が多すぎる" required>
        通知が多すぎる
    </label><br>
    
    <label>
        <input type="radio" name="cancel_reason" value="そのほか" required>
        そのほか
    </label><br>
    
    <label>
        <input type="radio" name="cancel_reason" value="回答しない" required>
        回答しない
    </label><br>

    <p>もしよろしければ退会理由を詳しくお聞かせください:</p>
    <textarea name="detailed_reason" rows="4" cols="50"></textarea><br><br>

    <button type="submit" name="cancel_subscription">退会する</button>
</form>

PHPの処理

まずはユーザーがログインした状態かどうかをチェック、『wp_get_current_user』で現在のユーザー情報を取得します。

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
// ユーザーがログインしているか確認
if ( ! is_user_logged_in() ) {
wp_redirect( home_url() );
exit;
}
$current_user = wp_get_current_user();
// ユーザーがログインしているか確認 if ( ! is_user_logged_in() ) { wp_redirect( home_url() ); exit; } $current_user = wp_get_current_user();
// ユーザーがログインしているか確認
if ( ! is_user_logged_in() ) {
    wp_redirect( home_url() );
    exit;
}
$current_user = wp_get_current_user();

フォームが送信された際に『cancel_subscription』のname属性を持っているかチェックします。

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
if ( isset( $_POST['cancel_subscription'] ) ) {
}
if ( isset( $_POST['cancel_subscription'] ) ) { }
if ( isset( $_POST['cancel_subscription'] ) ) {
}

name属性から退会理由をそれぞれ取得します。

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
// 退会理由を取得
$cancel_reason = sanitize_text_field( $_POST['cancel_reason'] );
$detailed_reason = sanitize_textarea_field( $_POST['detailed_reason'] );
// 退会理由を取得 $cancel_reason = sanitize_text_field( $_POST['cancel_reason'] ); $detailed_reason = sanitize_textarea_field( $_POST['detailed_reason'] );
// 退会理由を取得
$cancel_reason = sanitize_text_field( $_POST['cancel_reason'] );
$detailed_reason = sanitize_textarea_field( $_POST['detailed_reason'] );

退会理由を記録するには『update_user_meta()』を使用します。
以下ではID名、フィールド名、値を保存しています。

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
// 退会理由を記録 (例: ユーザーメタデータに保存)
update_user_meta( $current_user->ID, 'cancel_reason', $cancel_reason );
update_user_meta( $current_user->ID, 'detailed_reason', $detailed_reason );
// 退会理由を記録 (例: ユーザーメタデータに保存) update_user_meta( $current_user->ID, 'cancel_reason', $cancel_reason ); update_user_meta( $current_user->ID, 'detailed_reason', $detailed_reason );
// 退会理由を記録 (例: ユーザーメタデータに保存)
update_user_meta( $current_user->ID, 'cancel_reason', $cancel_reason );
update_user_meta( $current_user->ID, 'detailed_reason', $detailed_reason );

管理者でない場合に権限でなくても自分自身を削除できるようにユーザーの削除に必要なファイルをインクルードします。『wp_delete_user()』でユーザーを削除します。

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
// 管理者権限がない場合でも自分自身を削除
if ( $current_user->ID > 0 ) {
require_once( ABSPATH . 'wp-admin/includes/user.php' ); // ユーザー削除に必要なファイルをインクルード
wp_delete_user( $current_user->ID );
}
// 管理者権限がない場合でも自分自身を削除 if ( $current_user->ID > 0 ) { require_once( ABSPATH . 'wp-admin/includes/user.php' ); // ユーザー削除に必要なファイルをインクルード wp_delete_user( $current_user->ID ); }
// 管理者権限がない場合でも自分自身を削除
if ( $current_user->ID > 0 ) {
    require_once( ABSPATH . 'wp-admin/includes/user.php' ); // ユーザー削除に必要なファイルをインクルード
    wp_delete_user( $current_user->ID );
}

最後に退会後のURLにリダイレクトをかけます。

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
wp_redirect( home_url( '/goodbye/' ) );
wp_redirect( home_url( '/goodbye/' ) );
wp_redirect( home_url( '/goodbye/' ) );

まとめ

以上、『ワードプレスのユーザー退会ページの作成と退会理由を取得する方法』でした。

テラ合同会社(東京都)

テラは2014年に東京都でスタートアップしたホームページ制作会社です。ホームページ制作以外にも広告運用、マーケティング、ブランディング、印刷物など幅広い領域をサポートしています。
コーポレートサイトはこちらをご覧ください。