Wordpressの画像のaltを一括で置換する
2017-09-16
大変めんどくさい客から「SEOには画像に狙ってるキーワードを意識したaltの指定が必要で~~~お前がちゃんと指定してないから~~~」みたいな、うるさい連絡が来ました。どっかのSEO業者の営業電話でも受けたのでしょう。
「自分で管理してるサイトなんだから、勝手に指定すれば良いだろ」という話なんですが、要約すると「めんどくさいから代わりにやれ」とのこと。何言ってんだこいつ。
「お前の孫の写真とか見ながらalt指定するなんて、こっちのがめんどくさいし苦痛だわ」と思いましたが、揉めると更にめんどくさいので、とりあえず「孫の写真のaltに孫って入れるの?SEOとか関係ないけど?」と嫌味を言ったところ、「写真の内容とは関係なく、このエクセルに書かれたキーワードを適当に入れ込んでくれれば良い」と趣旨のスパム行為を要望されたので、適当にやってしまいました。
ということで、そのやってしまい方を解説します。
wordpress上の画像データの扱いを理解する
wordpressでは、画像も投稿の一つとして管理されます。具体的には、メディアに画像をアップロードしたタイミングで、データベース上のwp_postsというテーブルにデータが作成されます。
画像データの特徴は、post_typeとpost_mime_type。画像データの場合以下のようなデータが設定されます。
post_type:attachment
post_mime_type:image/jpeg
image/jpegはjpegの場合です。pngならimage/pngになります。
wordpress上のaltデータの扱いを理解する
altデータはwp_postsではなく、wp_postmetaの方に入ります。
post_id : 画像のpost_id
meta_key : _wp_attachment_image_alt
meta_value : altに入れた値
こんな感じです。ということで、altが設定されていない画像の場合、wp_postmetaにデータは作成されません。
画像データ全てにaltを設定する
SQL一本で行くとめんどくさいので、素直にエクセルやテキストエディタを使います。
まずaltが設定されていないデータの抽出
1 2 3 4 5 6 |
SELECT `wp_posts`.id FROM `wp_posts` LEFT JOIN `wp_postmeta` ON `wp_postmeta`.post_id = `wp_posts`.id AND `wp_postmeta`.meta_key = '_wp_attachment_image_alt' AND `wp_postmeta`.meta_value is null WHERE `wp_posts`.post_type = 'attachment' AND `wp_posts`.post_mime_type LIKE '%image%' |
JOINして_wp_attachment_image_altが存在しないデータのpost_idだけを引っ張ります。こいつをエクスポートするなりなんなりして、エクセルなりテキストエディタなりにバーッと貼り付けます。
で、_wp_attachment_image_altが存在しない=insertで追加なので
1 2 |
INSERT INTO `wp_postmeta` ( post_id, meta_key, meta_value) VALUES ( 画像のpost_id, '_wp_attachment_image_alt', '画像に設定するalt') |
みたいなSQLを大量に生成。エクセルでセル指定使ってさっきエクスポートしたpost_idを画像のpost_idに、任意のaltを画像に設定するaltに指定してやればOK。数が多ければバルクインサートにした方が良いかもしれない。
もしaltが空でない画像のaltもいじりたいなら、altが存在する画像に限定したpost_id取得用のSQLを作る。
1 2 3 4 5 6 7 |
SELECT `wp_posts`.id, `wp_postmeta`.meta_value FROM `wp_posts` LEFT JOIN `wp_postmeta` ON `wp_postmeta`.post_id = `wp_posts`.id AND `wp_postmeta`.meta_key = '_wp_attachment_image_alt' WHERE `wp_posts`.post_type = 'attachment' AND `wp_postmeta`.meta_value is NOT NULL AND `wp_posts`.post_mime_type LIKE '%image%' |
後はさっきと同じようにエクセルでSQL文を作る。さっきはinsertだったけど、今度はupdate文になるので注意。
1 2 3 |
UPDATE `wp_postmeta` SET meta_value = '画像に設定するalt' WHERE post_id = 画像のpost_id |
プログラム書いた方が早くない?
人によってはそうだと思いますが、開発環境作るのに手間取る人もいるでしょう。
ものによってはプログラム書くよりも、テキストエディタのマクロとかエクセルの方が手軽で早い場合も少なくありません。
レアケースを想定した情報なので参考になるかどうかわかりませんが、こういうやってしまい方もあるという一例でした。