【WordPress】投稿パスワード一括管理

環境整備

phpMyAdminを使って post_password をまとめて統一した手順

WordPressで「投稿にパスワード保護」を使っていると、あとから投稿ごとに違うパスワードが混在して管理が面倒になることがある。
今回は、Xserver上のWordPressで、既存の投稿パスワードを一括で同じ値に変更する方法を備忘録としてまとめる。


背景

WordPress標準機能では、投稿単位でパスワード保護を設定できる。
しかし、運用を続けていると次のような問題が起きやすい。

  • どの投稿にどのパスワードを設定したか忘れる
  • 投稿ごとに異なるパスワードが混在する
  • 個別変更が面倒
  • 一括で共通化したい

WordPress管理画面では基本的に個別編集が前提なので、
大量に変更する場合はデータベースを直接更新したほうが早い。


結論

WordPressの投稿パスワードは、データベースの wp_posts テーブルにある
post_password カラムに保存されている。

したがって、phpMyAdminで対象データベースにログインし、
wp_posts に対して UPDATE 文を実行すれば一括変更できる。


前提条件

今回の対象環境は以下。

  • レンタルサーバー: Xserver
  • CMS: WordPress
  • 対象DB: Ex. xs78XXXX_wp8 (rebirth-lab.site/ai)
  • 対象テーブル: wp_posts

まず注意点

データベースを直接更新するので、事前バックアップは必須

また、以下の点に注意する。

  • wp_posts は投稿だけでなく固定ページも含む
  • 共通パスワードにすると漏洩時の影響が大きい
  • SQL実行前に対象レコードを確認したほうが安全
  • phpMyAdminでは、間違って補助ボタンの UPDATE を押さない

手順

1. Xserverで事前バックアップを取得する

Xserverのサーバーパネルで以下に進む。

データベース → MySQLバックアップ取得・復元 → 手動バックアップ

ここで対象DBのバックアップをダウンロードしておく。
今回のように複数DBがある場合は、対象のDB名を間違えないこと

■DB名の確認方法

サイト(Ex. Rebirth-lab.site/ai)に対する、WordPress DBの確認方法

 Xserver サーバパネル→データベース→MySQL設定→DB名→Site名(下図)


2. 対象のデータベース名を確認する

WordPressごとにどのDBを使っているか分からない場合は、
wp-config.phpDB_NAME を見る。

例:

define('DB_NAME', 'xsXXXXX_wp8');

今回の変更対象は xsXXXXX_wp8 だった。


3. phpMyAdminに入る

Xserverのサーバーパネルから以下へ進む。

データベース → phpMyAdmin

ここで注意するのは、
WordPress管理画面のID/PWではなく、MySQLユーザー名とMySQLパスワードでログインすること。

なお、最初に別ユーザーで入ると、
対象DBが見えず、別のDBしか表示されないことがある。

つまり、

  • xsXXXXX_wp1 しか見えない
  • 本当は xsXXXXX_wp8 を触りたい

という場合は、そのDBに権限のあるMySQLユーザーでログインし直す必要がある


4. 対象テーブル wp_posts を開く

phpMyAdminで左メニューから以下を選ぶ。

  • データベース: xs7XXXXX_wp8
  • テーブル: wp_posts

ここで上部メニューの SQL タブを開く。


5. いきなり更新せず、まず確認する

まずは、パスワードが設定されている投稿だけを一覧表示して確認する。

SELECT ID, post_title, post_type, post_password
FROM wp_posts
WHERE post_password <> ''
AND post_type = 'post';

このSQLで確認できる内容は以下。

  • 投稿ID
  • 投稿タイトル
  • 投稿タイプ
  • 現在の投稿パスワード

これで、どの投稿が一括変更対象になるかを事前確認できる。


6. 投稿パスワードを一括変更する

確認できたら、次のSQLを実行する。

UPDATE wp_posts
SET post_password = '共通パスワード'
WHERE post_password <> ''
AND post_type = 'post';

たとえば実際にはこう書く。

UPDATE wp_posts
SET post_password = 'abc12345'
WHERE post_password <> ''
AND post_type = 'post';

これで、すでにパスワードが設定されている投稿だけが、
指定した共通パスワードに一括変更される。


重要な操作上の注意

SQL欄には「追記」ではなく「置き換え」

phpMyAdminで最初に表示される

SELECT * FROM wp_posts WHERE 1

のような文は、全部消して置き換える

つまり、

  • 既存SQLの下に追記するのではない
  • 自分のSQLだけを1本貼る

のが正しい。


下の UPDATE ボタンは押さない

phpMyAdminには下側に

  • SELECT
  • INSERT
  • UPDATE
  • DELETE

などのボタンがあるが、
これらはSQL自動生成用の補助ボタンである。

誤って UPDATE を押すと、次のような長いひな形が自動生成される。

UPDATE `wp_posts` SET `ID`='[value-1]', `post_author`='[value-2]', ...
WHERE 1

これは今回使うものではない。
そのまま実行してはいけない。

今回必要なのは、自分で書いた短いSQLを SQL タブで直接実行することである。


実行するのは Go ボタン

正しい流れは以下。

  1. SQLタブを開く
  2. 既存の文を全部消す
  3. 自分のSQLを貼る
  4. Go を押す

つまり、
UPDATEボタンではなく、SQLを貼ったあとに Go を押す


固定ページも対象にしたい場合

投稿だけでなく固定ページも同じパスワードに統一したい場合は、
条件を以下のように変更する。

UPDATE wp_posts
SET post_password = 'abc12345'
WHERE post_password <> ''
AND post_type IN ('post', 'page');

今回ハマったポイント

今回の作業で実際にハマった点を整理しておく。

1. phpMyAdminに入ったのに対象DBが見えない

原因は、別のMySQLユーザーでログインしていたこと。
phpMyAdminでは、そのユーザーに権限のあるDBしか表示されない。

2. WordPress管理画面の「バックアップ」はDBバックアップではない

管理画面に表示されていた「バックアップ」は、
テーマ設定やプラグイン設定のバックアップ画面であり、
MySQLデータベース全体のバックアップとは別物だった。

3. SQL欄で UPDATE ボタンを押してしまった

これは phpMyAdmin の自動生成機能であり、
今回のような手書きSQL実行には不要だった。


最終的な実用手順まとめ

最終的には、以下の流れで実行すればよい。

手順まとめ

  1. Xserverで対象DBをバックアップ
  2. wp-config.php で対象DB名を確認
  3. 対象DB用のMySQLユーザーで phpMyAdmin にログイン
  4. wp_posts テーブルを開く
  5. まず確認用SELECTを実行
  6. 問題なければUPDATEを実行
  7. WordPress側で実際に投稿パスワードが統一されたか確認

実際に使うSQLまとめ

確認用

SELECT ID, post_title, post_type, post_password
FROM wp_posts
WHERE post_password <> ''
AND post_type = 'post';

投稿だけ一括変更

UPDATE wp_posts
SET post_password = 'abc12345'
WHERE post_password <> ''
AND post_type = 'post';

投稿と固定ページを一括変更

UPDATE wp_posts
SET post_password = 'abc12345'
WHERE post_password <> ''
AND post_type IN ('post', 'page');

まとめ

WordPressで投稿パスワードを大量に管理していると、
あとから運用がかなり面倒になる。

その場合、phpMyAdminから wp_posts.post_password を直接更新すれば、
既存投稿のパスワードを一括で共通化できる。

ただし、

  • バックアップを取る
  • 対象DBを間違えない
  • 事前にSELECTで確認する
  • phpMyAdminの補助ボタンに惑わされない

この4点はかなり重要である。

コメント

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