arcanum_jp’s blog

おっさんの日記

ワードプレスでログイン後しか入れないページを作る

ワードプレスでコンテンツを公開しているとどうしても、バッチとかのボタンを押すページが欲しいなとなったりします。いや、、なったのです。それでとりあえずログインした後でないと表示できないページというのを1つ覚えたのでメモしておきます。

まず仕組み

まずワードプレス(固定ページ)の表示仕組みとして以下のようにリクエストがきたらコンテンツデータをテンプレートに当て込んで返しているみたいですね。それが固定ページの場合は各テーマにあるpage.php

f:id:arcanum_jp:20210131095125p:plain


このテンプレートを変えてやって、ログインしてなければ別のページ(この場合ではTopページj)に遷移させれば良いようです。

f:id:arcanum_jp:20210131102610p:plain

実際にやってみる

管理用ページ用のテンプレートを作ります。別にイチからつくるわけでもなく、使用しているテーマの直下にあるpage.phpをコピーしてpage-admin.phpを作るだけです。

cp page.php page-admin.php
ls -l page*
-rw-r--r-- 1 root     root     751 Jan 31 01:00 page-admin.php
-rw-r--r-- 1 www-data www-data 751 Jan  3 22:21 page.php


この作ったテンプレートの冒頭でログイン後しか見れないという条件を書きます。page.phpのコピーなので以下のようになってるはずです。冒頭6行目までコメント部になってるので、8〜13行目の条件を書きます。

このときに注意は、Template Name:というコメント行は必ず書いてください。後続する文字列にはテンプレート名を書きます。この名前がテンプレート名になるようです。

page-admin.php

  1 <?php
  2 /**
  3  * The template for displaying all pages
  4  *
  5  */
  6 
  7 
  8 /**
  9     Template Name: まいてんぷれーと
 10  */
 11 if (!is_user_logged_in()){
 12     header( "location: " . home_url() );
 13 }
 14 
 15 
 16 get_header(); ?>


この状態で固定ページを作り、テンプレートを指定します。

f:id:arcanum_jp:20210131103322p:plain

先ほど作ったテンプレートが選択肢に入ります。

f:id:arcanum_jp:20210131103417p:plain


この状態でこの固定ページに対して、ログイン前、ログイン後でアクセスすると、次のような状態になります。

状態 挙動
ログイン前 Topページに移動する
ログイン後 ページが表示される


このやり方の場合、パーマネントURLのページIDをオベておく必要があり、なんかちょっとダサいというところでしょうか。投稿のひとつになってしまうのもちょっといただけない。できるなら管理画面の左側メニューに追加して表示したいのですが別の方法みたいです。例えば会員サイトで非会員は見れない、会員しか見れないお得情報などに使えるのでしょうか。でもとりあえず今やりたい事の目的はできたのでよしとします。