- phpMyAdminを使って post_password をまとめて統一した手順
- 背景
- 結論
- 前提条件
- まず注意点
- 1. Xserverで事前バックアップを取得する
- 2. 対象のデータベース名を確認する
- 3. phpMyAdminに入る
- 4. 対象テーブル wp_posts を開く
- 5. いきなり更新せず、まず確認する
- 6. 投稿パスワードを一括変更する
- SQL欄には「追記」ではなく「置き換え」
- 下の UPDATE ボタンは押さない
- 実行するのは Go ボタン
- 1. phpMyAdminに入ったのに対象DBが見えない
- 2. WordPress管理画面の「バックアップ」はDBバックアップではない
- 3. SQL欄で UPDATE ボタンを押してしまった
- 手順まとめ
- 確認用
- 投稿だけ一括変更
- 投稿と固定ページを一括変更
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.php の DB_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 ボタン
正しい流れは以下。
- SQLタブを開く
- 既存の文を全部消す
- 自分のSQLを貼る
- 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実行には不要だった。
最終的な実用手順まとめ
最終的には、以下の流れで実行すればよい。
手順まとめ
- Xserverで対象DBをバックアップ
wp-config.phpで対象DB名を確認- 対象DB用のMySQLユーザーで phpMyAdmin にログイン
wp_postsテーブルを開く- まず確認用SELECTを実行
- 問題なければUPDATEを実行
- 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点はかなり重要である。


コメント