WordPress会員登録後に不動産の限定コンテンツを閲覧【コピペで簡単に設置できます】

2020年1月9日

この記事では、WordPressで作成した不動産サイトに会員登録を設置します。会員登録といっても、作成済みの購読者権限のみのユーザーIDとパスワードをメールで通知する機能です。
ユーザーはログイン後に限定コンテンツを閲覧することができるようにします。

会員登録を設置する手順

会員登録機能の手順
  1. ワードプレス管理画面の購読者ユーザーを新規作成する
  2. functions.phpにログイン処理のコードを追記する
  3. サイドバーにログイン機能を設置する
  4. 会員登録メールフォームを作成する
  5. ログインしたユーザーだけが閲覧できるコンテンツを作成する

購読者ユーザーを新規作成する

ワードプレス管理画面でユーザーの新規作成をします。

functions.phpにログイン処理のコードを追記する

下記のコードをfunctions.phpに追記します。

/**
 * ログイン処理をまとめた関数
 */
function my_user_login() {
    $user_name = isset( $_POST['user_name'] ) ? sanitize_text_field( $_POST['user_name'] ) : '';
    $user_pass = isset( $_POST['user_pass'] ) ? sanitize_text_field( $_POST['user_pass'] ) : '';

    // ログイン認証
    $creds = array(
        'user_login' => $user_name,
        'user_password' => $user_pass,
    );
    $user = wp_signon( $creds );

    //ログイン失敗時の処理
    if ( is_wp_error( $user ) ) {
        echo $user->get_error_message();
        exit;
    }

    //ログイン成功時の処理
    $url = $_SERVER["REQUEST_URI"];
    wp_redirect($url);
    exit;

    return;
}

/**
 * after_setup_theme に処理をフック
 */
add_action('after_setup_theme', function() {
    if ( isset( $_POST['my_submit'] ) && $_POST['my_submit'] === 'login') {

        // nonceチェック
        if ( !isset( $_POST['my_nonce_name'] ) ) return;
        if ( !wp_verify_nonce( $_POST['my_nonce_name'], 'my_nonce_action' ) ) return;

        // ログインフォームからの送信があれば
        my_user_login();
    }
});


サイドバーにログイン機能を設置する

サイドバー(sidebar.php)や任意の場所に下記のコードを追記します。

<?php if( is_user_logged_in() ) : ?>
<div class="borderBox">
<a href="<?php echo wp_logout_url( home_url() ); ?>">ログアウト</a>
</div>
<?php else : ?>
<form class="my_form" name="my_login_form" id="my_login_form" action="" method="post">
    <div>
        <label for="login_user_name">ユーザ名</label>
        <input id="login_user_name" name="user_name" type="text" required>
    </div>
    <div>
        <label for="login_password">パスワード</label>
        <input id="login_password" name="user_pass" id="user_pass" type="password" required>
    </div>
    <button type="submit" name="my_submit" class="my_submit_btn" value="login">ログイン</button>
    <p class="my_forgot_pass">
        メンバー登録、パスワードを忘れた方は下記をクリックしてください。
 <a class="buy_kotei" href="/member">メンバー登録はこちら</a>
    </p>
    <?php wp_nonce_field( 'my_nonce_action', 'my_nonce_name' );  //nonceフィールド設置 ?>
</form>
<?php endif; ?>

会員登録メールフォームを作成する

phpファイルを作成してテーマフォルダーにアップロード

下記6つのphpファイルを作成します。コードを記載しているのでコピペをしていただくか、下記よりファイルをダウンロードしてください。

  1. member-check.php
  2. member-completion.php
  3. member-confirm.php
  4. member-index.php
  5. member-input.php
  6. member-sendmail.php
[download id="460″]

【member-check.php】

<?php
/*******************************
 固定ページ お問い合わせ
 お問い合わせフォーム 文字列チェック
*******************************/
// 不正アクセスチェック
if(!$noindexaccess){
    header("HTTP/1.0 404 Not Found");exit();
}
 
/* 危険文字列置換ファンクション */
function Chk_StrMode($str){

    // タグを除去
    $str = strip_tags($str);
    // 空白を除去
    $str = mb_ereg_replace("^( ){0,}","",$str);
    $str = mb_ereg_replace("( ){0,}$","",$str);
    $str = trim($str);
    // 特殊文字を HTML エンティティに変換する
    $str = htmlspecialchars($str);

    return $str;
}
/* 未入力チェックファンクション */
function Chk_InputMode($str,$mes){  
    $errmes = "";
    if($str == ""){$errmes .= "{$mes}<br>\n";}
    return $errmes;
}
 
function CheckEmailAddress($sMailaddress) {
    if(preg_match('/^(?!(?:(?:\x22?\x5C[\x00-\x7E]\x22?)|(?:\x22?[^\x5C\x22]\x22?)){255,})(?!(?:(?:\x22?\x5C[\x00-\x7E]\x22?)|(?:\x22?[^\x5C\x22]\x22?)){65,}@)(?:(?:[\x21\x23-\x27\x2A\x2B\x2D\x2F-\x39\x3D\x3F\x5E-\x7E]+)|(?:\x22(?:[\x01-\x08\x0B\x0C\x0E-\x1F\x21\x23-\x5B\x5D-\x7F]|(?:\x5C[\x00-\x7F]))*\x22))(?:\.(?:(?:[\x21\x23-\x27\x2A\x2B\x2D\x2F-\x39\x3D\x3F\x5E-\x7E]+)|(?:\x22(?:[\x01-\x08\x0B\x0C\x0E-\x1F\x21\x23-\x5B\x5D-\x7F]|(?:\x5C[\x00-\x7F]))*\x22)))*@(?:(?:(?!.*[^.]{64,})(?:(?:(?:xn--)?[a-z0-9]+(?:-[a-z0-9]+)*\.){1,126}){1,}(?:(?:[a-z][a-z0-9]*)|(?:(?:xn--)[a-z0-9]+))(?:-[a-z0-9]+)*)|(?:\[(?:(?:IPv6:(?:(?:[a-f0-9]{1,4}(?::[a-f0-9]{1,4}){7})|(?:(?!(?:.*[a-f0-9][:\]]){7,})(?:[a-f0-9]{1,4}(?::[a-f0-9]{1,4}){0,5})?::(?:[a-f0-9]{1,4}(?::[a-f0-9]{1,4}){0,5})?)))|(?:(?:IPv6:(?:(?:[a-f0-9]{1,4}(?::[a-f0-9]{1,4}){5}:)|(?:(?!(?:.*[a-f0-9]:){5,})(?:[a-f0-9]{1,4}(?::[a-f0-9]{1,4}){0,3})?::(?:[a-f0-9]{1,4}(?::[a-f0-9]{1,4}){0,3}:)?)))?(?:(?:25[0-5])|(?:2[0-4][0-9])|(?:1[0-9]{2})|(?:[1-9]?[0-9]))(?:\.(?:(?:25[0-5])|(?:2[0-4][0-9])|(?:1[0-9]{2})|(?:[1-9]?[0-9]))){3}))\]))$/iD', $sMailaddress)){
        list($username,$domain)=explode('@',$sMailaddress);
        if(!checkdnsrr($domain,'MX')){
            return false;
        }
    return true;
    }
return false;
}
 
#----------------------------------------------------------------------------------
# データの受け取りと危険文字列置換  ※Chk_StrMode(文字列);
#----------------------------------------------------------------------------------
$param = array();
 
// 引数を元に文字列処理及び変換処理を行う
foreach($_POST as $k=>$e):
    $params[$k] = Chk_StrMode($e);
endforeach;
 
// 変数に入れる
extract($params);
 
#----------------------------------------------------------------------------------
# エラーチェック   ※Chk_InputMode(文字列,モード,エラーメッセージ);
#----------------------------------------------------------------------------------
$error_mes .= Chk_InputMode($namae,"・お名前をご記入ください。<br />\n");
 
$error_mes .= Chk_InputMode($email,"・メールアドレスをご記入ください。<br />\n");
 
// メールアドレスチェック
if($email){ 
    if(CheckEmailAddress($email) != true){
        $error_mes .= "・メールアドレスの形式に誤りがあります。<br />\n";
    }
}
?>


【member-completion.php】

<?php
/*******************************
 固定ページ お問い合わせ
 お問い合わせフォーム 完了画面
*******************************/
// 不正アクセスチェック
if(!$noindexaccess){
    header("HTTP/1.0 404 Not Found");exit();
}
?>
<p>メールが正常に送信されました。</p>

member-confirm.php

<?php
/*******************************
 固定ページ お問い合わせ
 お問い合わせフォーム 確認画面
*******************************/
// 不正アクセスチェック
if(!$noindexaccess){
    header("HTTP/1.0 404 Not Found");exit();
}?>
 
<script>
//2重送信防止スクリプト
var flg_Submit = false;
function Fnk_DoubleSubmit(){
  if(flg_Submit){
    alert("処理中です。");return false;
  }
  else{
    flg_Submit = true;return true;
  }
}
</script>
<?php
 if (isset($_POST['rent'])) {$q = $_POST["rent"];}
 if (isset($_POST['lease'])) {$r = $_POST["lease"];}
 if (isset($_POST['buy'])) {$s = $_POST["buy"];}
 if (isset($_POST['sell'])) {$t = $_POST["sell"];}
 $a = array($q,$r,$s,$t)
?>
以下の内容でよろしければ[送信する]ボタンを押してください。
<form name="toiawase2" method="post" enctype="multipart/form-data" action="<?php echo esc_url( home_url( '/member/' ) ); ?>" onsubmit="return Fnk_DoubleSubmit();">
    <div>
        <label>名前</label><span>※</span><br />
        <p style="background:#f8f8f8;"><?php echo ($namae)?$namae:"";?></p><input name="namae" type="hidden" value="<?php echo ($namae)?$namae:"";?>" />
    </div>
    <div>
        <label>メールアドレス</label><span>※</span><br />
        <p style="background:#f8f8f8;"><?php echo ($email)?$email:"";?></p><input name="email" type="hidden" value="<?php echo ($email)?$email:"";?>" />
    </div>
    <div>
        <label>ご利用の目的</label><span>※</span><br />
        <p style="background:#f8f8f8;"><?php echo implode(" ",$a) . '<br>';?></p><input name="title" type="hidden" value="<?php echo '利用の目的:' . implode(" ",$a) . '<br>';?>" />
    </div>
    <div>
        <input type=button value="修正する" onClick="javascript:history.back();"> <input type="submit" value="送信する" />
        <input type="hidden" name="action" value="completion">
    </div>
</form>

member-index 固定ページテンプレート
(member-index.php)

24行目「任意の名前」と26行目の「任意のメールアドレス」を編集して下さい。

<?php
/*******************************
 固定ページ お問い合わせ
 Template Name: member-index
*******************************/
get_header(); ?>
<div class="container">
  <div class="contents">
    <!--記事本文-->
    <?php if(have_posts()): the_post(); ?>
    <article>
      <!--タイトル-->
      <h1><?php the_title(); ?></h1>
      <!--本文取得-->
      <?php the_content(); ?>
<?php
/* ↑↑↑↑↑↑↑↑↑↑ ここから上部は page.php のヘッダーのコピペ ↑↑↑↑↑↑↑↑↑↑  */
 
// エラーメッセージと不正アクセスフラグ
$error_mes = "";
$noindexaccess = true;
 
// メアドに表示する名前
define('WEBMST_NAME', '任意の名前');
// お問い合わせ用メアド
define('WEBMST_MAIL', '任意のメールアドレス');
// 送信先メールアドレス
$mailto = 'WEBMST_MAIL';
 
#--------------------------------------------------------------
# 全体のコントロール
#--------------------------------------------------------------
switch($_POST["action"]):
 
case "completion":
/////////////////////////////////////////////////////////////////////////////
// メール送信処理と完了画面を表示
     
    include('member-check.php');
    if(!$error_mes){
        include('member-sendmail.php');
        include('member-completion.php');
    }
    else{
        die("<p>エラーが発生しました。<br />もう一度送信しなおしてください。</p>");
    }
    break;
case "confirm":
/////////////////////////////////////////////////////////////////////////////
// エラーがあれば再入力、なければ確認画面表示
     
    include('member-check.php');
    if($error_mes):
        include('member-input.php');
    else:
        include('member-confirm.php');
    endif;
 
    break;
default:
/////////////////////////////////////////////////////////////////////////////
// 新規入力画面を表示
 
    include('member-input.php');
 
endswitch;
 
/* ↓↓↓↓↓↓↓↓↓↓ ここから下部は page.php のフッターのコピペ ↓↓↓↓↓↓↓↓↓↓  */
?>
    </article>
    <?php endif; ?>
  </div>
  <?php get_sidebar(); ?>
</div>
<?php get_footer(); ?>


member-input.php

<?php
/*******************************
 固定ページ お問い合わせ
 お問い合わせフォーム 入力画面
*******************************/
// 不正アクセスチェック
if(!$noindexaccess){
    header("HTTP/1.0 404 Not Found");exit();
}
?>
 
<div style="color:red;">
<?php // エラーメッセージがあったら表示する
echo ($error_mes)?'
---------------------<br />
 入力エラーです<br />
---------------------<br />'.$error_mes:"";?>
</div>
<p>下記を入力して送信していただく事で、不動産情報を閲覧できるログインユーザー名とログインパスワードをメールにて送付致します。</p>
<form name="toiawase" method="post" enctype="multipart/form-data" action="<?php echo esc_url( home_url( '/member/' ) ); ?>">
    <div class="bottom_margin">
        <label>名前</label><span>※</span><br />
        <input type="text" name="namae" size="40" maxlength="60" value="<?php echo ($namae)?$namae:"";?>" required />
    </div>
    <div class="bottom_margin">
        <label>メールアドレス</label><span>※</span><br />
        <input type="email" name="email" size="40" maxlength="200" value="<?php echo ($email)?$email:"";?>" required />
    </div>
    <div class="bottom_margin">
        <label>ご利用の目的を教えて下さい。(複数選択可能)</label><span>※</span><br />
        <input type="checkbox" name="rent" size="40" maxlength="60" value="不動産を借りたい" />不動産を借りたい<br />
        <input type="checkbox" name="lease" size="40" maxlength="60" value="不動産を貸したい" />不動産を貸したい<br />
        <input type="checkbox" name="buy" size="40" maxlength="60" value="不動産を購入したい" />不動産を購入したい<br />
        <input type="checkbox" name="sell" size="40" maxlength="60" value="不動産を売却したい" />不動産を売却したい
    </div>
    <div>
        <input type="submit" value="送信する" />
        <input type="hidden" name="action" value="confirm">
    </div>
</form>


member-sendmail.php

<?php
/*******************************
 固定ページ お問い合わせ
 お問い合わせフォーム メール送信
*******************************/
// 不正アクセスチェック
if(!$noindexaccess){
    header("HTTP/1.0 404 Not Found");exit();
}
 
#-------------------------------------------------------------------------------------------
# メール送信処理1(お客様への返信メール)
#-------------------------------------------------------------------------------------------
// メール本文
$mailbody = "この度は、メンバー登録をしていただきありがとうございます。
下記のユーザー名とパスワードでログインしていただく事で、メンバー特典として、【不動産販売情報】と【過去の不動産成約事例】が閲覧できます。

ユーザー名:購読者ユーザーのユーザー名

パスワード:購読者ユーザーのパスワード

尚、ユーザー名とパスワードは定期的に変更しますので、変更時にメールにてお知らせ致します。
 
────────────────────────────────
 <お問い合わせ先>
 ".WEBMST_NAME."
 E-MAIL: ".WEBMST_MAIL."
────────────────────────────────";
 
// 件名とフッター
$subject = WEBMST_NAME."Mail from Form";
$headers = "Reply-To: ".mb_encode_mimeheader(WEBMST_NAME)."<".WEBMST_MAIL.">\n";
$headers .= "Return-Path: ".WEBMST_MAIL."<".WEBMST_MAIL.">\n";
$headers .= "From:".mb_encode_mimeheader(WEBMST_NAME)."<".WEBMST_MAIL.">\n";
 
// メール送信(失敗時:強制終了)
$usrmail_result = mb_send_mail($email,$subject,$mailbody,$headers);
if(!$usrmail_result)die("お客様へのメール送信に失敗しました。<br />\n
                         誠に申し訳ございませんがこちらまでご連絡ください。“".WEBMST_MAIL."”");
 
#-------------------------------------------------------------------------------------------
# メール送信処理2(送信先は $mailto宛)
#-------------------------------------------------------------------------------------------
// 件名を設定
$subject = "【お問い合わせ】";
 
// Headerとbodyとsubjectを設定(送信元はお客様 $email)
$headers = "Reply-To: ".mb_encode_mimeheader(WEBMST_NAME)."<".WEBMST_MAIL.">\n";
$headers .= "Return-Path: ".mb_encode_mimeheader(WEBMST_NAME)."<".WEBMST_MAIL.">\n";
$headers .= "From:".mb_encode_mimeheader(WEBMST_NAME)."<".WEBMST_MAIL.">\n";
 
// メール本文
$mailbody = "サイトよりお問い合わせを受け付けました。
 
────────────────────────────────
 
■名前: $namae 様より
 
■メールアドレス: $email

■題名: $title

■メッセージ:
$message
 
────────────────────────────────
";
 
// メール送信実行
if(!empty($mailto)){
    $sendmail_result = mb_send_mail($mailto,$subject,$mailbody,$headers);
     
    if(!$sendmail_result){
        die("<p>メール送信に失敗しました。<br>\n誠に申し訳ございませんが最初から操作をやり直してください。</p>");
    }
}
else{
    die("<p>メールを送信する事が出来ませんでした。<br>\n誠に申し訳ございませんが“".WEBMST_MAIL."”へ直接メールにて<br>お問い合わせしていただけますようお願い申し上げます。</p>");
}
?>


ログインしたユーザーだけが閲覧できるコンテンツを作成する

アイコン
jisaku 不動産営業 兵庫在住の不動産営業マンです。ワードプレスで作成した不動産サイトをカスタマイズして集客をしています。住宅ローンシュミレーションや売却の簡易査定機能、地図での検索機能などを、プラグインを使わずにphp、javascript、mysqlで作成しています。コピペで簡単に利用できるように作成方法などを公開しています。
FOLLOW ME

メールでのお問い合わせは、下記を入力して下さい。