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による直接操作が作業効率を大きく向上させます。ただし、データベースの直接操作は慎重に行い、必ずバックアップを取ってから実行してください。