会員制サイトを構築した際にユーザー自ら退会できるページの作成が必要になる場合があります。
また、同時に退会の理由などのアンケートを取りたい場合もあります。
そこで今回は『ワードプレスのユーザー退会ページの作成と退会理由を取得する方法』を紹介します。
コードを紹介
ファイル名はpage-cancel.php、ワードプレスの固定ページ作成からテンプレート名、Cancelを選んで作成することを想定しています。
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 );
wp_redirect( home_url( '/goodbye/' ) );
/* Template Name: Cancel */
if ( ! is_user_logged_in() ) {
wp_redirect( home_url() );
$current_user = wp_get_current_user();
<form method="post" action="">
<input type="radio" name="cancel_reason" value="イメージしていたものと違った" required>
<input type="radio" name="cancel_reason" value="利用しなくなった" required>
<input type="radio" name="cancel_reason" value="通知が多すぎる" required>
<input type="radio" name="cancel_reason" value="そのほか" required>
<input type="radio" name="cancel_reason" value="回答しない" required>
<p>もしよろしければ退会理由を詳しくお聞かせください:</p>
<textarea name="detailed_reason" rows="4" cols="50"></textarea><br><br>
<button type="submit" name="cancel_subscription">退会する</button>
<?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属性を振っておきます。
<form method="post" action="">
<input type="radio" name="cancel_reason" value="イメージしていたものと違った" required>
<input type="radio" name="cancel_reason" value="利用しなくなった" required>
<input type="radio" name="cancel_reason" value="通知が多すぎる" required>
<input type="radio" name="cancel_reason" value="そのほか" required>
<input type="radio" name="cancel_reason" value="回答しない" required>
<p>もしよろしければ退会理由を詳しくお聞かせください:</p>
<textarea name="detailed_reason" rows="4" cols="50"></textarea><br><br>
<button type="submit" name="cancel_subscription">退会する</button>
<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』で現在のユーザー情報を取得します。
if ( ! is_user_logged_in() ) {
wp_redirect( home_url() );
$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属性を持っているかチェックします。
if ( isset( $_POST['cancel_subscription'] ) ) {
if ( isset( $_POST['cancel_subscription'] ) ) {
}
if ( isset( $_POST['cancel_subscription'] ) ) {
}
name属性から退会理由をそれぞれ取得します。
$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名、フィールド名、値を保存しています。
// 退会理由を記録 (例: ユーザーメタデータに保存)
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()』でユーザーを削除します。
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にリダイレクトをかけます。
wp_redirect( home_url( '/goodbye/' ) );
wp_redirect( home_url( '/goodbye/' ) );
wp_redirect( home_url( '/goodbye/' ) );
まとめ
以上、『ワードプレスのユーザー退会ページの作成と退会理由を取得する方法』でした。