GHWEB06.GRASSHOPPER

WordPressでログインユーザー毎に任意のページを表示

  • Category:Web関連
  • Web関連の備忘録

bnr_keepoutいろいろやり方はあると思いますが、ここではスラッグを使用してログインユーザー毎に個別の情報を表示させてみました。

下準備

制限をかけたい投稿記事のスラッグを指定

スラッグには redirect+ユーザーID と指定します。
ユーザーID が 1 の場合、redirect1 と指定。

パーマリンクの設定

設定画面で「投稿名」を選択するか、
「カスタム構造」で /%postname%/ と指定して変更を保存。

投稿記事のテンプレートに記述するPHP

投稿記事のテンプレート single.php に下記を追加します。
追加すると全投稿記事がログイン必須になり、自分のIDが付いている記事以外は見えません。
許可されていない記事を見ようとすると/wp/にリダイレクトをします。
ユーザーには、個別のアドレスを教えればOK。

<?php
//is_user_logged_in でユーザーがログイン済みか判断する
if (!is_user_logged_in()) {
//未ログインの場合、auth_redirect() でログインページにリダイレクト
auth_redirect();
} else if ( is_user_logged_in() ){
//ログイン済みの場合、以下の処理
//wp_get_current_user で現在のユーザ情報を取得する
$user = wp_get_current_user();
//取得したユーザー情報からIDを抜出
$user_id = $user->get('ID');
//ページのアドレスを取得
$url = $_SERVER['REQUEST_URI'];
//正規表現を使って条件に会わない場合、リダイレクト
if (!preg_match('/redirect'.$user_id.'/', $url)){
//リダイレクト先 /hoge/
wp_redirect( '/hoge/' );
}
}
?>

ユーザー毎に記事が必ずあるならリダイレクト先を下記にすると自分の記事にリダイレクトするようになります。ですので、ユーザーには /127.0.0.1/hoge/redirect1/ というような共通のアドレスを連絡すればOKになります

wp_redirect( '/hoge/' );
↓↓↓
wp_redirect( './redirect'.$user_id.'/' );

とりあえず

上記でユーザー毎に指定ページを見せれるようになりますが管理者も見えないので、管理者はリダイレクトをしない仕組みが必要ですね。また、ページの表示は出来ませんが、RSSで内容が見えてしまいますのでRSSの停止も必要です。使用される場合は必ずチェックを行って下さい。

以上、利用シーンは限られますがご参考になればと思います。

RELATED ARTICLE
  • 掲載: