work.log

エンジニアの備忘録的ブログ

WordPressのアイキャッチ画像を一括で設定・変更するプラグイン

投稿:2014-01-17 19:59  更新:

WordPress でアイキャッチ画像の「設定・変更」を一括で行うプラグインを作りました。

一部投稿のアイキャッチ画像を変更する必要が出てきたのでコツコツ頑張ってみましたが、これが結構大変で早々に心が折れました。一記事毎に画面遷移させながら設定するの面倒臭すぎ!

変更する対象をある程度絞り込んで、ボタンひとつで更新できたら楽なのに…

とこの時思ったので、これを要件にしてプラグインを作ってみました。

思いつきの割には良く出来たと思うので、プラグイン本体も含め下記事項を書き残しておきます。

スポンサーリンク

プラグインのインストールと使い方

このプラグインでは下記の事が出来ます。

  • カテゴリ・タグから対象記事を絞り込み
  • アイキャッチ画像が未設定の場合のみ更新する機能
  • 設定済みアイキャッチ画像を新しい物に上書きする機能
  • 設定する画像はメディアアップローダーから選択
注意事項

プラグインは WordPress のデータベース、wp_postmeta テーブルを更新するので、念のため DB のバックアップを推奨します。

また、このプラグインは基本メンテナンスしていませんので、バグがあったとしても気付けていません。コメントかメールをいただければ対応しますが、基本利用は自己責任でお願いします。

プラグインは下記 URL で公開しています。

インストールは通常の WordPress プラグインと同じで、ダウンロードした zip ファイルを管理画面からインストールするか、zip を展開して出てきたフォルダを FTP 等で サーバ上の plugins ディレクトリにアップロードすると OK です。

プラグインを有効化すると、管理画面に「画像一括変更」というメニューが追加され下記のようなプラグイン管理画面が表示できます。

wordpress-plugin-development-010-01

使い方は、

  1. カテゴリ・タグから対象範囲を絞り込む
  2. 画像を上書きするかどうか決める
  3. 設定するアイキャッチ画像を選ぶ
  4. 更新ボタンを押す

という感じです。

プラグインの実行例

例として下記パターンの実行例を掲載します。

  • アイキャッチ画像が設定されていない記事を更新
  • アイキャッチ画像が設定されている記事を上書き更新
  • その他、プラグインのメッセージ等

アイキャッチ画像が設定されていない記事を更新

アイキャッチ画像が設定されていない記事に画像を設定する例です。

対象はカテゴリ名を「nothumbnail」として登録した記事です。

wordpress-plugin-development-010-02

管理画面のセレクトボックスよりカテゴリ名「nothumbnail」を選び、設定する画像をメディアアップローダーより選択します。

wordpress-plugin-development-010-03

選択された画像は上記のようにプレビュー表示されますが、thumbnail サイズの画像が WordPress に登録されている必要があります。

問題なければこのまま「一括更新」を押します。

wordpress-plugin-development-010-04

処理に成功すると「処理結果」の所にメッセージが表示されます。もし、更新対象が存在しない場合には下記のようなメッセージを表示します。

wordpress-plugin-development-010-06

処理成功後、下記のように対象記事のアイキャッチ画像が更新されます。

wordpress-plugin-development-010-05

アイキャッチ画像が設定されている記事を上書き更新

次は、アイキャッチ画像が既に設定されている記事を上書き更新する例です。

先ほどアイキャッチ画像を設定した記事の一つに、タグ名「nothumbnail」を追加してみます。

タグのセレクトボックスは、カテゴリのセレクトボックスに連動して表示されるため「投稿が存在するタグ名」しか表示されません。

wordpress-plugin-development-010-07

タグのセレクトボックスで「nothumbnail」を選択し、「上書きする」にチェックを入れます。後は、利用するアイキャッチ画像を適当なものに変えて更新してみます。

wordpress-plugin-development-010-10

こんな感じで、カテゴリ名「nothumbnail」かつ、タグ名「nothumbnail」の記事のみが更新できます。

その他、プラグインのメッセージ等

プラグインで「全てのカテゴリ・タグ」を選択した場合は、下記のような確認ダイアログを表示するようにしています。

wordpress-plugin-development-010-11

こっちはさらに「上書きする」を選択した場合。

wordpress-plugin-development-010-12

このプラグインには「元のアイキャッチ画像に復元」という機能はないので、全記事を更新する場合には注意が必要です。(DB のバックアップがあれば戻せますけど)

また、画像を選択しない場合には下記のようなメッセージが表示されます。

wordpress-plugin-development-010-13

プラグインの内部について

プラグインで「更新ボタン」を押した時の一連動作としてはこんな感じになっています。

  1. プラグインのフォームに入力された値を読み取り
  2. 読み取った値を Ajax で WordPress に送信
  3. 受け取ったカテゴリ・タグ名より対象範囲を抽出
  4. 抽出したデータから投稿 ID を抽出
  5. 抽出した投稿 ID とフォームから読み取った画像 ID でテーブルを更新

実の所、8 割以上がこれまでに書いたコードのコピペで構成されているので特に目新しいところもなかったりします。

このプラグインは管理画面上のデータを WordPress の DB に保存するような事はしていませんが、プラグインをインストールした時に下記データを wp_options テーブルに保存します。

mysql> SELECT * FROM wp_options WHERE option_name = "wptc_nonce_key";
+-----------+----------------+----------------------------------+----------+
| option_id | option_name    | option_value                     | autoload |
+-----------+----------------+----------------------------------+----------+
|      6810 | wptc_nonce_key | 1259bcfa8f0ffd9de03c986cad7b0770 | yes      |
+-----------+----------------+----------------------------------+----------+

データの参照は WordPress に問い合わせする形になるのでそのためのセキュリティの一貫です。

この値は乱数を使い自動設定するので変更は不要です。プラグインの動作にはこれがないとエラーになるので、間違って消した場合には「停止」->「有効」をすることで再作成できます。

また、このデータはプラグインを「停止・削除」する事で自動で消えるようになっています。

最後に、アイキャッチ画像の設定 (画像 ID) を更新するテーブルは下記です。

mysql> SHOW COLUMNS FROM wp_postmeta;
+------------+---------------------+------+-----+---------+----------------+
| Field      | Type                | Null | Key | Default | Extra          |
+------------+---------------------+------+-----+---------+----------------+
| meta_id    | bigint(20) unsigned | NO   | PRI | NULL    | auto_increment |
| post_id    | bigint(20) unsigned | NO   | MUL | 0       |                |
| meta_key   | varchar(255)        | YES  | MUL | NULL    |                |
| meta_value | longtext            | YES  |     | NULL    |                |
+------------+---------------------+------+-----+---------+----------------+

このテーブルにこんなデータが入っています。

mysql> SELECT * FROM wp_postmeta WHERE meta_key = '_thumbnail_id' AND post_id = 33;
+---------+---------+---------------+------------+
| meta_id | post_id | meta_key      | meta_value |
+---------+---------+---------------+------------+
|      77 |      33 | _thumbnail_id | 32         |
+---------+---------+---------------+------------+

で、ここに対して WordPress 関数 update_post_meta で更新をかけてあげています。

Usage: update_post_meta( $post_id, ‘_thumbnail_id’, $thumbnail_id );

実際には、こんな SQL が実行されます。

INSERT INTO wp_postmeta (post_id,meta_key,meta_value) VALUES (33,’_thumbnail_id’,’3786′);

大体ですが、以上がプラグインの内部的な説明です。

これまで、アイキャッチ画像のサイズ合わずに断念したカスタマイズとかもあったりしたので、これで解消できるんじゃないかと密かに期待してます。

長くなりましたが「WordPressのアイキャッチ画像を一括で設定・変更するプラグイン」についてはこれでおしまいです。

更新履歴

日付 バージョン 概要
2014/01/17 1.0.0 プラグイン公開
2018/11/23 1.0.1 不具合を数件修正

スポンサーリンク

コメント

  1. ユーロの行方 より:

    これ、他ブログからWordPressへの引っ越し作業にめちゃくちゃ便利です。アート引越センターよりも重宝できるプラグインです(・∀・)
    ありがたい!

  2. ユーロの行方 より:

    欲を言えばカテゴリが多いサイトもあるので同サムネイルをカテゴリを選択して一括設定できるような機能が欲しいです。

    • miura より:

      ユーロの行方 様

      コメントありがとうございました。

      > 欲を言えばカテゴリが多いサイトもあるので同サムネイルをカテゴリを選択して一括設定できるような機能が欲しいです。

      カテゴリもしくはタグをチェックボックス式で選択して一括更新という感じでしょうか。(選択モード 2 のような形で)

      作ってる時はいくつかの選択方法を考えていたのですが、エラー処理の手間とこのプラグイン自体の利用頻度を天秤にかけて今回のようなエラー処理が少なくて済むものにした記憶があります^^;

      なので、次回修正する際には取り入れてみたいと思います。

      貴重なご意見ありがとうございました。

  3. ジョブ より:

    使わさせて頂きました。
    素晴らしいプラグインをご提供して下さいまして有り難うございます。

    追伸
    予約済みの記事も対象になると尚良いです。

    • miura より:

      ジョブ 様

      コメントありがとうございます。

      また、貴重なご意見ありがとうございました。
      次回アップデートする際には検討してみたいと思います。

  4. 匿名 より:

    アップロード済みの画像や外部の画像も選択出来たら便利な気がします

  5. 名無しさん より:

    外部の画像やアップロード済みの画像も選択できたら便利です

  6. 匿名 より:

    親子カテゴリで子カテゴリにはうまく動きましたが親のカテゴリには対象記事はありませんでしたと出ました。
    なので、子カテゴリを一時的に外してみて再度試してみたところうまく行きました。
    サーバー側の問題かも知れませんがコメントを書き込ませてもらいました。

    便利なプラグインをありがとうございます。

    • miura より:

      コメントありがとうございます。

      このプラグインは元々、親子カテゴリを想定した作りとはなっていません。なので、サーバ側の問題ではなくプラグインの仕様となります。

      よろしくお願いします。

      • 匿名 より:

        特殊なサーバーでうまく動かないプラグインが多いのでそれなのかなと思って他のカテゴリで試してみたところうまくいったので何が違うのか見つけるまで時間がかかって親子の違いに気付いて試したらうまくいったので喜んだ勢いで書き込んだところもありました。

        親子を想定していなかったのですね。
        こういうプラグインは、たくさんの人の役に立つと思うので作者の方に感謝です。

        コメントの返信ありがとうございました。

  7. 荻野 より:

    こんにちは。
    便利に利用させていただいています。
    数が多くなって動作しなくなったので気付いたのですが、1500Postあたりに上限があるようです。どのように改造すればよいか教えていただけませんでしょうか?
    よろしくお願いいたします。

    • miura より:

      荻野さん

      コメントありがとうございました。

      1,500投稿あたりに上限があるとの事ですが、処理が失敗する際はエラー等は表示されますでしょうか ?

      おそらく、処理中に Web サーバのタイムアウトで途中で強制終了されてしまっているのではと考えています。

      そうであれば、修正方法として一度に処理する最大投稿数に制限をかければいけるのではと思いますが、まずは失敗時の詳しい状況が知りたいです。

  8. mala より:

    すばらしいです!ブログの引越しをしてから、手でアイキャッチを入れ始めましたが、気が遠くなりそうで・・・ありがとうございました!

  9. ぐいぐい より:

    本当に助かりました。
    こんな便利なプラグインはないっす。
    ありがとうございました!

  10. keybow より:

    すばらしいプラグインをありがとうございました。何時間か掛かりそうな作業がたったの1分足らずで終わりました!本当にありがとうございました!

  11. ともやす より:

    WP Thumbnail Changer使いました。
    タグだけ指定したら、指定していない記事も含め、ブログ全部の記事のアイキャッチが更新されてしまいました。
    エラーなのか分かりませんが、こんなのでは使えません。

    • miura より:

      ともやすさん

      公開以降、メンテナンスをしていなかったのでバグに気付いていませんでした。
      こちらコメントを参考にバグを修正しました。

      ご指摘ありがとうございました。

      • ともやす より:

        早速の対応ありがとうございます。
        また、使わせていただこうと思います。

  12. まえち より:

    素晴らしいプラグインをありがとうございます!

    こちら、固定ページには適用されませんでした。

    固定ページが膨大にあるので、固定ページにも適用される仕様ですと凄くありがたいです・・・!!

    • miura より:

      まえちさん

      ご意見ありがとうございます。

      固定ページは通常だとカテゴリもタグも設定できないページですので、このプラグインでは対応出来ないんですよね。

      このプラグインは同じカテゴリやタグが付いた記事を範囲指定して画像を変更するために作ったプラグインとなっています。

  13. ぽんた より:

    素晴らしいプラグインをありがとうございます!このようなプラグインを探していました。
    他ブログからワードプレスに移行したらアイキャッチがすべて解除されていしまい途方に暮れていました・・・本当に助かりました^^

  14. ヒロ より:

    タグ別でアイキャッチ画像を一括で設定するのに使わせていただきました。どうもありがとうございます。

コメントを残す

よく読まれている記事

  • 今日
  • 週間
  • 月間