ワードプレスのアイキャッチ画像は、csv でインポートしても投稿とうまく紐付いてくれず、思うように一括登録ができません。
200〜300 ほどの記事のアイキャッチ画像を一括で登録・変更する機会があったので、その手順をまとめました。
完全にスマートではない部分も多少残りましたが、一度方法を体系化しておけば、以降は数百だろうが数千だろうがガサッとやっつけることができるかと思います。
目次
「Really Simple CSV Importer」で csv からインポートできない
ワードプレスのコンテンツを csv で管理している方の大半は、おそらくプラグイン「WP CSV Exporter」でコンテンツをエクスポートして、「Really Simple CSV Importer」で csv を吸い上げるといった方法を取ることが多いのではないでしょうか。
ただ、以前は post_thumbnail
にアイキャッチ画像の URL を記述してインポートすれば、(抜け漏れが多少出ることはあるものの)画像を csv から読み込ませることができたはずです。(多分)
ただ、ワードプレスのバージョンアップをしたことが原因か、上記の方法ではアイキャッチ画像を一括でインポートすることができなくなっていました。
他のプラグインを使う形でも良いのでとにかく一括で登録する方法をググってみましたが、「それ、一括登録じゃねーやん」って感じのものが並ぶ中、お目当ての記事にたどり着くことができました。
著者様、ありがとうございます。
以下に phpMyAdmin からワードプレスのアイキャッチ画像の一括登録する方法をまとめました。
phpMyAdmin でアイキャッチ画像の情報を一括登録
手順1:ワードプレスの「メディア」からアイキャッチに設定したい画像を一括アップロードする
phpMyAdmin でアイキャッチ画像をゴニョゴニョするには、まず始めに画像に固有の ID を割り振る必要があります。
ワードプレスの管理画面「メディア」から、登録したい画像を選択してドラッグアンドドロップで一括登録し、固有 ID を付与します。
これは自戒でもありますが、アイキャッチ画像に限らず、画像ファイル名の命名ルールは作っておいた方が良いと思います。
例)tmb-
+ パーマリンク名
+ .jpg
など
一括で登録・変更などを行う際に、一定のルールが無ければ複雑な条件を加えていく場面が出てくるため、特にデータベース型サイトなどを管理する際はその場限りの命名をやっていると「もはや手作業でやった方が早くね?」といった状況に陥ると思います。
手順2:wp_posts のテーブルから画像の post_id を取ってくる
ワードプレスの投稿や固定ページの情報は、MySQL のデータベース内にある wp_posts
のテーブルに格納され、それぞれ個別の post_id
が振り分けられていますが、WP にアップロードした画像もこれらと同じ場所に入っています。
はじめは少々奇妙な気もしましたが post_type
の情報は、投稿なら post
、固定ページなら page
といった具合で分類され、アップロードした画像は attachment
という区分で同じテーブルに格納されています。
ですので、まずはテーブルのデータを csv でエクスポートし、アイキャッチ画像として使いたい「画像の post_id
」を知る必要があります。
手順3:お目当ての記事 ID とアイキャッチ画像 ID を紐付ける
アイキャッチを設定したい投稿 ID と、アイキャッチ画像 ID の両方が揃ったら、まずはスプレッドシートなどでそれぞれを紐付けます。
この辺りは VLOOKUP
を使うなりして多少の事前準備が必要です。
手順4:SQL を実行
そして、先程の参考記事そのままとなり恐縮ですが、以下のような記述で SQL の INSERT
文を作成します。
(投稿ID, '_thumbnail_id', 'アイキャッチ画像ID')
具体的には以下のような書き方になります。
INSERT INTO wp_postmeta (post_id, meta_key, meta_value) VALUES
(101, '_thumbnail_id', '201'),
(102, '_thumbnail_id', '202'),
(103, '_thumbnail_id', '203'),
(104, '_thumbnail_id', '204'),
(105, '_thumbnail_id', '205');
phpMyAdmin で上記の SQL を実行すれば、数百ある記事のアイキャッチ画像でも 1秒足らずの時間で設定・変更が可能です。
アイキャッチ画像の情報を一括上書き登録
上記の方法でアイキャッチ画像の一括新規登録は可能ですが、上書きはできません。
すでにサムネイル画像が指定されている記事については、データベース上の情報を上書きする必要があります。
上書き登録には UPDATE
文を使います。
UPDATE wp_postmeta
SET meta_value = 'アイキャッチ画像ID'
WHERE post_id = 投稿ID and meta_key = '_thumbnail_id';
テーブル wp_postmeta
の中の、post_id
かつ meta_key
が一致するデータの meta_value
の値を上書きするといったイメージですね。
下記サイト様の「WHERE句に複数条件を指定」の章を参考にさせて頂きました。ありがとうございます。
具体的には以下のような書き方になります。
UPDATE wp_postmeta SET meta_value = '201' WHERE post_id = 101 and meta_key = '_thumbnail_id';
UPDATE wp_postmeta SET meta_value = '202' WHERE post_id = 102 and meta_key = '_thumbnail_id';
UPDATE wp_postmeta SET meta_value = '203' WHERE post_id = 103 and meta_key = '_thumbnail_id';
UPDATE wp_postmeta SET meta_value = '204' WHERE post_id = 104 and meta_key = '_thumbnail_id';
UPDATE wp_postmeta SET meta_value = '205' WHERE post_id = 105 and meta_key = '_thumbnail_id';
ここまで来て誠に恐縮ですが、僕はそこそこの期間ワードプレスを触ってきているものの SQL を体系的に学んでいないので、この辺りかなりたどたどしい感じがあります。
「ワードプレスの根幹じゃねーか!」と総ツッコミをくらいそうですが、優先順位と学習コストを考えるとなかなか手が出ず。。
上記、実行される際は必ず事前バックアップ&自己責任にてお願い致します m(__)m
上書きINSERT(今後の課題)
さて、以下は今後の課題なのですが、前章までの手順を踏めば(少なくとも僕の環境下では)正常にワードプレスのサムネイル画像の一括登録が可能です。
ただ、新規登録と上書き登録が混在する状態では実質的に2度の手間がかかります。
そこで以下の記事を参考に SQL を実行してみたのですが、うまく行かず。
自分の理解が及んでいないことが原因ですが、もう少し勉強する機会があれば更新してみようと思います。