ワードプレスのアイキャッチ画像(サムネイル)を一括登録する

日本国内に約10台しか存在しない
高精細インクジェットプリンターで作る
ハイグレードなオリジナルTシャツ
Tシャツ + 印刷代が税込みで
1枚 902円~
自動お見積もり

ワードプレスのアイキャッチ画像は、csv でインポートしても投稿とうまく紐付いてくれず、思うように一括登録ができません。

200〜300 ほどの記事のアイキャッチ画像を一括で登録・変更する機会があったので、その手順をまとめました。

完全にスマートではない部分も多少残りましたが、一度方法を体系化しておけば、以降は数百だろうが数千だろうがガサッとやっつけることができるかと思います。

「Really Simple CSV Importer」で csv からインポートできない

ワードプレスのコンテンツを csv で管理している方の大半は、おそらくプラグイン「WP CSV Exporter」でコンテンツをエクスポートして、「Really Simple CSV Importer」で csv を吸い上げるといった方法を取ることが多いのではないでしょうか。

ただ、以前は post_thumbnail にアイキャッチ画像の URL を記述してインポートすれば、(抜け漏れが多少出ることはあるものの)画像を csv から読み込ませることができたはずです。(多分)

ただ、ワードプレスのバージョンアップをしたことが原因か、上記の方法ではアイキャッチ画像を一括でインポートすることができなくなっていました。

他のプラグインを使う形でも良いのでとにかく一括で登録する方法をググってみましたが、「それ、一括登録じゃねーやん」って感じのものが並ぶ中、お目当ての記事にたどり着くことができました。
著者様、ありがとうございます。

WordPressでプラグインを使わずにアイキャッチ画像を一括登録する方法|茶トラ猫のエンジニア日記
「アイキャッチ画像を設定するのを忘れていた」 「1 個ずつ記事を編集するの面倒だな」 「無駄にプラグイン入れたくないな」

以下に 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句に複数条件を指定」の章を参考にさせて頂きました。ありがとうございます。

【SQL】UPDATE文の書き方:サンプル多数あり | SE日記
このページでは、ORACLEデータベースで、表に存在するデータを更新・変更するSQL、UPDATE文について紹介します。UPDATE文の基本構文に加えて、たくさんのサンプルを掲載していますのでぜひ参考にしてください。SQLとは何か?どんな種類があるか基礎的な内容については↓で詳しく解説していますので参考にしてください。...

具体的には以下のような書き方になります。

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 を実行してみたのですが、うまく行かず。

【MySQL】上書きINSERTする方法 | MySQL日記
ここではMySQLで、上書きINSERT(データがなければINSERT、あれば更新)方法を紹介しています。上書きINSERTする方法上書きINSERTする方法は、INSERT文にON DUPLICATE KEY UPDATE句を付けて実行します。例えば、TAB1というCOL1列を主キーとするテーブルに、次のSQLを実行...

自分の理解が及んでいないことが原因ですが、もう少し勉強する機会があれば更新してみようと思います。

タイトルとURLをコピーしました