2026年7月3日

WordPress

プラグイン不要!オリジナルUIで実装する特定ページだけをパスワード保護!

プラグイン不要!オリジナルUIで実装する特定ページだけをパスワード保護!

こんな状況、ありませんか?

WordPressサイトの特定のページだけをパスワードで保護したい。
でも、サイト全体を会員制にするほどではない。
ページひとつのために重いプラグインを入れるのも気が進まない。

WordPressには標準でページのパスワード保護機能がありますが、入力フォームのデザインはWordPress標準のもの。テーマのデザインに合わせたオリジナルの入力画面を出すことができないわけです。
今回は、「プラグインなし・テーマの改変なし」で、対象ページだけをパスワード保護する方法を紹介します。PHPファイルを1枚、所定のフォルダに置くだけです。

仕組みの概要

WordPressには「mu-plugins(Must-Use Plugins)」という仕組みがあります。

wp-content/mu-plugins/フォルダにPHPファイルを置くだけで、有効化の操作なしに自動的に読み込まれる、いわば「自家製プラグイン」の仕組みです。
このファイルが、WordPressが特定ページを表示しようとする直前に割り込みます。

テーマファイルにも、データベースにも、wp-config.phpにも手を加えません。ファイルを1枚置くだけ。削除すれば元に戻ります。

パスワードの管理──「ハッシュ」を使う理由

パスワードをファイルに直接書いてしまうと、万一ファイルが流出した際にパスワードが丸見えになります。そこで『ハッシュ』という仕組みを使います。
ハッシュとは一方通行の変換です。

パスワード(例: mypassword)
↓ 変換(bcrypt)
$2y$10$… (ハッシュ値)

※ ハッシュ値からパスワードには絶対に戻せない

ファイルに保存するのはハッシュ値だけです。ログイン時には入力されたパスワードを同じ方法で変換して、保存済みのハッシュと照合するわけです。平文パスワードはどこにも残りません。
今回使用する『bcrypt』は、同じパスワードでも実行するたびに異なるハッシュが生成されますが、照合は正しく行われます。意図的に計算を重くして総当たり攻撃を困難にしている点も特徴です。

導入手順

手順1. パスワードのハッシュを生成する

ターミナルを立ち上げ、SSHでサーバーにログインし、以下のコマンドを実行します。
「設定するパスワード」の部分を実際のパスワードに変えてください。

php -r "echo password_hash('設定するパスワード', PASSWORD_DEFAULT) . PHP_EOL;"

「$2y$10$」から始まる文字列が出力されます。これがハッシュ値です。コピーしておきます。

*PHPのバージョンによってコマンドのパスが異なる場合があります。Xサーバーの場合は「/opt/php-8.3.30/bin/php」のように絶対パスで指定してください。

手順2. 配布ファイルをカスタマイズする

配布ファイル(webgallery-lock.php)を開き、冒頭の 「★ カスタマイズ」とコメントされている4箇所を書き換えます。

// ★ 手順1で生成したハッシュ値を貼り付ける
define('WEBGALLERY_PW_HASH', '$2y$10$ここに貼り付ける');
// ★ 保護したいページのスラッグ(URLの末尾部分)
define('WEBGALLERY_SLUG', 'webgallery');
// ★ Cookie名(このサイト内で他と重複しなければ何でもOK)
define('WEBGALLERY_COOKIE', 'my_gallery_auth');
// ★ Cookieの有効期間(日数)
define('WEBGALLERY_DAYS', 7);

「ページのスラッグ」とは、https://example.com/gallery/であればgalleryの部分です。WordPress管理画面のページ編集画面のURLから確認できます。

手順3. サーバーにアップロードする

カスタマイズしたファイルを以下のパスにアップロードします。

wp-content/mu-plugins/webgallery-lock.php

`mu-plugins` フォルダが存在しない場合は作成してください。FTPクライアントやSSHで作成できます。

手順4. 動作確認

対象ページのURLにブラウザでアクセスして、パスワード入力画面が表示されれば完了です。

ログアウトするには

パスワード入力後はCookieで記憶されます(デフォルト7日間)。
ログアウトしたい場合は、URLに 「?gallery_logout=1」を付けてアクセスするだけです。

https://example.com/gallery/?gallery_logout=1

パスワードを変更するには

新しいパスワードで手順1のコマンドを再実行し、生成されたハッシュ値で「WEBGALLERY_PW_HASH」を差し替えてアップロードするだけです。既存のCookieは自動的に無効になり、次のアクセス時にパスワード入力が求められます。

セキュリティの仕様

MacOS環境では実証済みです。

Categories: Script関連, Tips, WEBPublished On: 2026年7月 3日By
DTP Tips
  • PowerPointの画像を一括で取り出す方法

    2026年7月3日

  • テキストオーバーフローを自動で解消するスクリプト

    2026年4月24日

  • Excelから書き出したPDFをillustratorでベクター化した際に起こる色濁りを一発正規化!

    2026年3月2日

  • Adobe illustratorに配置した画像を同名のPDFに一括置き換え!

    2026年2月26日

  • バラバラのテキストをつないで1つに!

    2026年2月4日

  • Adobe illustrator Beta版「ターンテーブル」を使ってみた!

    2025年11月6日

  • Illustratorでつくる文字の囲み枠

    2024年8月22日

  • ドキュメントプロファイルを使って
    新規作業のストレスを軽減しよう

    2024年8月19日

WEB Tips
  • プラグイン不要!オリジナルUIで実装する特定ページだけをパスワード保護!

    2026年7月3日

  • CPT UI + ACF でカスタム投稿を運用するなら覚えておきたい便利ショートコード 5 選

    2026年4月30日

  • Webページを丸ごとスクショできる便利ツール「FireShot」のご紹介

    2026年4月7日

  • HTMLベースの小規模サイトのCMSはヘッドレスCMSが主流に!?

    2026年4月4日

  • モヤッとする、あれ。JS+CSSで「項目間だけ線」をスッキリ解決!

    2025年8月8日

  • WordPressサイトをGoogle検索から除外したい?
    「robots.txt」の正しい活用方法

    2025年7月3日

  • WordPressで記事を投稿してみよう!

    2025年6月26日

  • WordPressアップデートしてますか?

    2024年8月9日

取り組み
  • 小学校低学年向け夏休みカレンダー2025を配付します

    2025年6月20日