WordPressサイトの運営では、管理画面だけでは対応できない場面があります。記事の一括変更や複雑な条件での検索など、データベースを直接操作することで効率的に作業を進められます。
今回は、実務でよく使うWordPressのSQL操作をまとめました。phpMyAdminやコマンドラインから実行できるクエリを紹介します。
基本的なテーブル構成を把握する
WordPressの主要テーブルを確認しましょう。
-- 主要テーブル一覧を表示
SHOW TABLES LIKE 'wp_%';主要なテーブルは以下の通りです:
- wp_posts: 投稿・ページデータ
- wp_postmeta: 投稿のカスタムフィールド
- wp_users: ユーザー情報
- wp_usermeta: ユーザーのメタ情報
- wp_options: サイト設定
- wp_terms: タクソノミーの用語
- wp_term_relationships: 投稿とタクソノミーの関連
投稿関連のSQL操作
全投稿の一覧を取得
-- 公開済み投稿の一覧
SELECT ID, post_title, post_date, post_status
FROM wp_posts
WHERE post_type = 'post'
AND post_status = 'publish'
ORDER BY post_date DESC;特定文字列を含む投稿を検索
-- タイトルまたは本文に特定文字列を含む投稿
SELECT ID, post_title
FROM wp_posts
WHERE (post_title LIKE '%検索文字列%' OR post_content LIKE '%検索文字列%')
AND post_type = 'post'
AND post_status = 'publish';投稿の一括更新
-- 本文内の文字列を一括置換
UPDATE wp_posts
SET post_content = REPLACE(post_content, '置換前の文字列', '置換後の文字列')
WHERE post_type = 'post';
-- 特定カテゴリの投稿をすべて下書きに変更
UPDATE wp_posts
SET post_status = 'draft'
WHERE ID IN (
SELECT object_id
FROM wp_term_relationships
WHERE term_taxonomy_id = 5 -- カテゴリID
);カスタムフィールド関連の操作
カスタムフィールドの検索
-- 特定のカスタムフィールドを持つ投稿を取得
SELECT p.ID, p.post_title, pm.meta_value
FROM wp_posts p
INNER JOIN wp_postmeta pm ON p.ID = pm.post_id
WHERE pm.meta_key = 'custom_field_name'
AND p.post_status = 'publish';カスタムフィールドの一括更新
-- カスタムフィールドの値を一括変更
UPDATE wp_postmeta
SET meta_value = '新しい値'
WHERE meta_key = 'custom_field_name';
-- 不要なカスタムフィールドを削除
DELETE FROM wp_postmeta
WHERE meta_key = 'old_custom_field';ユーザー関連の操作
ユーザー情報の取得
-- 全ユーザーの基本情報
SELECT ID, user_login, user_email, user_registered
FROM wp_users
ORDER BY user_registered DESC;
-- 管理者権限のユーザーを取得
SELECT u.ID, u.user_login
FROM wp_users u
INNER JOIN wp_usermeta um ON u.ID = um.user_id
WHERE um.meta_key = 'wp_capabilities'
AND um.meta_value LIKE '%administrator%';パスワードを強制リセットする
管理画面にログインできなくなった場合、データベースから直接パスワードを変更できます。WordPressはパスワードをMD5ベースのphpassでハッシュ化して保存していますが、MD5で設定すると初回ログイン時にWordPressが自動的にphpass形式へ再ハッシュしてくれます。
-- 特定ユーザーのパスワードをリセット
UPDATE wp_users
SET user_pass = MD5('新しいパスワード')
WHERE user_login = 'admin';ユーザー名がわからない場合は、まず対象のユーザーを確認します。
-- ユーザー名とメールアドレスを確認
SELECT ID, user_login, user_email
FROM wp_users;
-- IDを指定してリセットする場合
UPDATE wp_users
SET user_pass = MD5('新しいパスワード')
WHERE ID = 1;リセット後は速やかにログインし、管理画面の「ユーザー」→「プロフィール」から正式なパスワードに変更してください。MD5のままだとセキュリティ強度が低い状態になります。
設定関連の操作
サイト設定の確認・変更
-- 主要な設定を確認
SELECT option_name, option_value
FROM wp_options
WHERE option_name IN ('siteurl', 'home', 'blogname', 'admin_email');
-- サイトURLを変更(移転時など)
UPDATE wp_options
SET option_value = 'https://new-domain.com'
WHERE option_name IN ('siteurl', 'home');データベース最適化・メンテナンス
不要データの削除
-- リビジョンを削除
DELETE FROM wp_posts
WHERE post_type = 'revision';
-- 自動保存を削除
DELETE FROM wp_posts
WHERE post_type = 'auto-draft';
-- スパムコメントを削除
DELETE FROM wp_comments
WHERE comment_approved = 'spam';孤立したメタデータの削除
-- 存在しない投稿のpostmetaを削除
DELETE pm FROM wp_postmeta pm
LEFT JOIN wp_posts p ON pm.post_id = p.ID
WHERE p.ID IS NULL;
-- 存在しないユーザーのusermetaを削除
DELETE um FROM wp_usermeta um
LEFT JOIN wp_users u ON um.user_id = u.ID
WHERE u.ID IS NULL;実行前の注意点
データベースを直接操作する際は、必ず以下の点を確認してください:
- バックアップを必ず取る: 操作前に全データのバックアップを作成
- テスト環境で確認: 本番環境で実行する前にテスト環境で動作確認
- WHERE句を忘れない: UPDATE/DELETEには必ず適切な条件を指定
- テーブル接頭辞を確認: wp_ 以外の接頭辞の場合は適宜変更
まとめ
WordPressのSQL操作を覚えることで、管理画面では困難な一括処理や複雑な検索が可能になります。特に大量のデータを扱うサイトでは、SQLによる直接操作が作業効率を大きく向上させます。ただし、データベースの直接操作は慎重に行い、必ずバックアップを取ってから実行してください。
