WordPressでユーザー登録機能を作る方法

ブログ

WordPressでカスタムのユーザー登録、ログイン、ログアウト機能を実装する方法を解説します。今回は、固定ページテンプレートを作成し、フォームを使ってユーザー登録やログインを行う方法を紹介します。

1. ユーザー登録機能の実装

まず、ユーザーがサイト上で登録できるように、ユーザー登録ページのテンプレートを作成します。

1.1 ユーザー登録用テンプレートの作成

以下のコードを register.php という名前で theme フォルダ内に保存し、固定ページテンプレートとして使用します。

<?php
/**
 * Template Name: ユーザー登録
 */
get_header();
?>

<div class="registration-form">
    <h2>ユーザー登録</h2>

    <?php
    if ($_SERVER['REQUEST_METHOD'] === 'POST' && !empty($_POST['action']) && $_POST['action'] === 'register_user') {
        $username         = sanitize_user($_POST['username']);
        $email            = sanitize_email($_POST['email']);
        $password         = $_POST['password'];
        $confirm_password = $_POST['confirm_password'];

        $errors = array();

        if (empty($username) || empty($email) || empty($password) || empty($confirm_password)) {
            $errors[] = 'すべてのフィールドを入力してください。';
        }
        if ($password !== $confirm_password) {
            $errors[] = 'パスワードが一致しません。';
        }
        if (!is_email($email)) {
            $errors[] = '有効なメールアドレスを入力してください。';
        }
        if (username_exists($username)) {
            $errors[] = 'このユーザー名は既に使用されています。';
        }
        if (email_exists($email)) {
            $errors[] = 'このメールアドレスは既に使用されています。';
        }

        if (empty($errors)) {
            $user_id = wp_create_user($username, $password, $email);
            if (!is_wp_error($user_id)) {
                echo '<p style="color:green;">ユーザー登録に成功しました。</p>';
            } else {
                $errors[] = 'ユーザー登録に失敗しました。';
            }
        }

        if (!empty($errors)) {
            foreach ($errors as $error) {
                echo '<p style="color:red;">' . esc_html($error) . '</p>';
            }
        }
    }
    ?>

    <form method="post">
        <p>
            <label for="username">ユーザー名</label><br>
            <input type="text" name="username" id="username" required>
        </p>
        <p>
            <label for="email">メールアドレス</label><br>
            <input type="email" name="email" id="email" required>
        </p>
        <p>
            <label for="password">パスワード</label><br>
            <input type="password" name="password" id="password" required>
        </p>
        <p>
            <label for="confirm_password">パスワード確認</label><br>
            <input type="password" name="confirm_password" id="confirm_password" required>
        </p>
        <input type="hidden" name="action" value="register_user">
        <p>
            <input type="submit" value="登録">
        </p>
    </form>
</div>

<?php
get_footer();

2. ログイン機能の実装

次に、ユーザーがログインできるページを作成します。

2.1 ログイン用テンプレートの作成

login.php という名前で、以下のコードを theme フォルダ内に保存します。

<?php
/**
 * Template Name: ユーザーログイン
 */
get_header();
?>

<div class="login-container">
    <?php
    if (is_user_logged_in()) {
        $user = wp_get_current_user();
        ?>
        <h2>ようこそ, <?php echo esc_html($user->display_name); ?> さん</h2>
        <form method="post">
            <input type="hidden" name="action" value="logout">
            <button type="submit" class='btn'>ログアウト</button>
        </form>
    <?php
    } else {
        if ($_SERVER['REQUEST_METHOD'] === 'POST' && isset($_POST['action']) && $_POST['action'] === 'login') {
            $username = sanitize_user($_POST['username']);
            $password = $_POST['password'];
            $remember = isset($_POST['remember']);

            $user = wp_signon(array(
                'user_login'    => $username,
                'user_password' => $password,
                'remember'      => $remember,
            ), false);

            if (is_wp_error($user)) {
                echo '<p style="color:red;">ログインに失敗しました。ユーザー名またはパスワードが間違っています。</p>';
            } else {
                wp_redirect(get_permalink());
                exit;
            }
        }
        ?>
        <h2>ログイン</h2>
        <form method="post">
            <p>
                <label for="username">ユーザー名</label><br>
                <input type="text" name="username" id="username" required>
            </p>
            <p>
                <label for="password">パスワード</label><br>
                <input type="password" name="password" id="password" required>
            </p>
            <input type="hidden" name="action" value="login">
            <p>
                <input type="submit" value="ログイン">
            </p>
        </form>
    <?php } ?>
</div>

<?php get_footer(); ?>

3. ログアウト機能の実装

以下のコードを functions.php に追加し、ログアウト処理を実装します。

function handle_user_logout() {
    if ($_SERVER['REQUEST_METHOD'] === 'POST' && isset($_POST['action']) && $_POST['action'] === 'logout') {
        wp_logout();
        wp_redirect(home_url('/login/'));
        exit;
    }
}
add_action('init', 'handle_user_logout');

4. メニューにログイン・ログアウトを追加

ナビゲーションメニューにログイン・ログアウトのリンクを追加するには、functions.php に以下を追加します。

function add_login_logout_menu($items, $args) {
    if (is_user_logged_in()) {
        $items .= '<li><a href="' . esc_url(home_url('/login/')) . '">マイページ</a></li>';
        $items .= '<li><a href="' . wp_logout_url(home_url()) . '">ログアウト</a></li>';
    } else {
        $items .= '<li><a href="' . esc_url(home_url('/login/')) . '">ログイン</a></li>';
    }
    return $items;
}
add_filter('wp_nav_menu_items', 'add_login_logout_menu', 10, 2);

これで、WordPressにユーザー登録・ログイン・ログアウト機能を実装できます!

タイトルとURLをコピーしました