[WordPress] 「おやおや」と「こどもも」

親カテゴリー「おやおや」とその子カテゴリー「こどもも」があるとします。WordPressでは子カテゴリー「こどもも」にチェックを入れた場合、親カテゴリー「おやおや」にはチェックが入りません。これを親カテゴリーにも自動的にチェックを入れるプラグイン(Parent Category Toggler)はあるのですが、これを過去分にさかのぼってチェックを入れるには?

INSERT INTO wp_term_relationships
SELECT object_id, term_taxonomy_id, 0 AS term_order
FROM (
SELECT DISTINCT r.object_id, p.term_taxonomy_id
FROM wp_term_relationships AS r
INNER JOIN wp_term_taxonomy AS t ON r.term_taxonomy_id = t.term_taxonomy_id
INNER JOIN wp_term_taxonomy AS p ON t.parent = p.term_id
WHERE t.taxonomy = 'category'
AND t.parent > 0 ) AS a
WHERE NOT EXISTS
(SELECT 'x'
FROM wp_term_relationships AS b
WHERE a.object_id = b.object_id
AND a.term_taxonomy_id = b.term_taxonomy_id)
;

view raw
gistfile1.sql
hosted with ❤ by GitHub

[WordPress] 未使用の meta 情報をテーブルから削除する SQL

delete from wp_postmeta
where not exists (select 'x' from wp_posts where wp_posts.ID = wp_postmeta.post_id);
delete from wp_comments
where not exists (select 'x' from wp_posts where wp_posts.ID = wp_comments.comment_post_id);
delete from wp_commentmeta
where not exists (select 'x' from wp_comments where wp_comments.comment_id = wp_commentmeta.comment_id);
delete from wp_usermeta
where not exists (select 'x' from wp_users where wp_users.ID = wp_usermeta.user_id);
delete from wp_term_taxonomy
where not exists (select 'x' from wp_terms where wp_terms.term_id = wp_term_taxonomy.term_id);
delete from wp_term_relationships
where not exists (select 'x' from wp_term_taxonomy where wp_term_taxonomy.term_taxonomy_id = wp_term_relationships.term_taxonomy_id);

ご利用は計画的に

[WordPress] テーブルプレフィックスを変更した時の後処理

テーブルプレフィックスを変更して DB をインポートした場合、(wp_)option、(wp_)usermeta テーブルを修正してやらないとアクセス権無しでログインできなくなる。
テーブルプレフィックスを wp_ から wp_other_ に変更した場合に修正するための SQL 文。

UPDATE wp_other_options SET option_name = 'wp_other_user_roles' WHERE option_name = 'wp_user_roles';
UPDATE wp_other_usermeta SET meta_key = 'wp_other_capabilities' WHERE meta_key = 'wp_capabilities';
UPDATE wp_other_usermeta SET meta_key = 'wp_other_dashboard_quick_press_last_post_id' WHERE meta_key = 'wp_dashboard_quick_press_last_post_id';
UPDATE wp_other_usermeta SET meta_key = 'wp_other_user-settings' WHERE meta_key = 'wp_user-settings';
UPDATE wp_other_usermeta SET meta_key = 'wp_other_user-settings-time' WHERE meta_key = 'wp_user-settings-time';
UPDATE wp_other_usermeta SET meta_key = 'wp_other_user_level' WHERE meta_key = 'wp_user_level';

[WordPress] 特定のカテゴリに属する投稿を任意のカスタム投稿タイプに変換する SQL

タイトルで言い切ってるシリーズ
カテゴリ ID 4 に属する投稿を、カスタム投稿タイプ photo に

カテゴリー 4 の投稿を、カスタム投稿タイプ photo に
update wp_posts
set post_type = 'photo'
where post_type = 'post'
and exists
(select object_id
from wp_term_taxonomy as t
inner join wp_relationships as r on t.term_taxonomy_id = r.term_taxonomy_id
where t.term_id = 4
and r.object_id = wp_posts.ID);

[WordPress] 投稿のコメント数がおかしいときの対処法

先日、Wordpressのデータを、
「ダッシュボード」→「ツール」→「エクスポート」
の手順でバックアップを取り、新しいデータベース上に、
「ダッシュボード」→「ツール」→「インポート」
の手順でインポートしました。
無事に記事もコメントも復元できたと思っていたのですが、過去の記事のコメント数の表示が「0」になっていました。
コメントがインポートできていないのかと思いましたが、記事を表示してみるときちんとコメントも表示されていました。
しかし「コメントはまだありません」の表示も出ています。
正常な状態に戻したいのですが、どこから手をつけたらいいのかわかりません。
どなたかご教授いただけませんでしょうか?

via. コメントが付いている記事なのにコメント数が0と表示される

へー、エクスポート→インポートしたときは comment_count は再計算されないんだ。
以下の SQL 文一発で、再計算されるはず。

UPDATE wp_posts p
SET p.comment_count = (
  SELECT count( c.comment_ID )
  FROM wp_comments c
  WHERE p.ID = c.comment_post_ID
  AND c.comment_approved =1
  )

$table_prefix 設定してる場合は、適宜テーブル名変えてね。