メディアライブラリを使ってサイト内で画像検索できるようにする

WordPress個別サポート

サイト内に蓄積したメディアライブラリの画像をキーワード検索できたら面白いかもしれませんよね。たとえば、「カフェ」で検索すると、タイトルやキャプション、説明に「カフェ」と入力されている画像が表示される仕組みです。

サイト内で画像検索
サイト内で画像検索したい

言うまでもありませんが、これらの画像はメディアライブラリに登録されています。

メディアライブラリを検索したい
画像はメディアライブラリに登録されている

ところが、おなじみの検索フォームでは、画像がキーワード検索でヒットしません。

メディアライブラリが検索にヒットしない
メディアライブラリが検索にヒットしない

これは、メディアライブラリが検索対象になっていないからです。

メディアライブラリを検索対象にするには、Search Everythingプラグインを使う方法があります。以下、手順を紹介します。

Search Everythingプラグインによる画像検索

「プラグイン」‐「新規追加」メニューからSearch Everythingプラグインをインストール、有効化します。

Search Everythingプラグインのインストール
Search Everythingプラグインのインストール

「設定」‐「Search Everything」メニューで検索設定します。

ここではメディアライブラリを検索対象にしたいので、「すべてのメディア (アップロードファイル) を検索」をチェックします。

メディアライブラリを検索対象に
メディアライブラリを検索対象に

「Save Changes」ボタンをクリックすると設定完了です。

これで、メディアライブラリが検索対象になり、画像のタイトル、キャプション、説明に入力された文字を基準にヒットするようになります。

メディアライブラリも検索結果に出てくる
メディアライブラリも検索結果に出てくる

検索結果にメディアライブラリの画像を表示

画像が検索対象になりましたが、アイキャッチ画像が表示されないので検索結果のレイアウトとしては物足りないかもしれません。

アイキャッチ画像が表示されない
アイキャッチ画像が表示されない

その場合、検索結果のテンプレート(search.phpなど)でアイキャッチ画像を表示しているコード「the_post_thumbnail();」を次のように書き換えます。

echo wp_get_attachment_image($post->ID, 'thumbnail');
この記事の例ではBizVektorのmodule_loop_post2.phpを修正していますが、他のテーマでも考え方は同じです。また、ここでは画像検索のことしか考えていませんがサイト内のアーカイブ(アイキャッチ画像の表示)と共存させるには本格的な条件分岐を記述する必要があります。十分にご注意ください。

これにより、アイキャッチ画像ではなくメディアライブラリの画像が表示されます。

メディアライブラリの画像が表示される
メディアライブラリの画像が表示される

あとは自由にレイアウトを変えれば、サイト内の画像検索っぽく見えるようになるでしょう。

サイト内で画像検索
サイト内で画像検索

画像のみを検索対象にする

本格的に画像検索を機能させるには仕上げが必要です。それは、「画像のみ」を検索対象にすることです。ここまでの手順では、投稿や固定ページなど通常の検索データに加えて「画像も」検索できるようになっています。それでも問題ありませんが、画像検索のみに特化したい場合は、次のようなコードを子テーマのfunctions.phpなどに追加します。

function my_search_filter( $query ) {
    if ( $query->is_search ) {
        $query->set( 'post_type', 'attachment' );
    }
    return $query;
}
add_filter( 'pre_get_posts', 'my_search_filter' );

上記のコードは以下のサイトを参考にさせていただきました。ありがとうございます。

【参考】PHP - wordpressのカスタム投稿のみを検索したい|teratail

これで投稿や固定ページはヒットせず画像(メディアライブラリ)のみが検索対象になります。

画像のみを検索対象にすることで投稿や固定ページはヒットしなくなるので、実際に使うときは主旨を理解したうえでご活用ください。

WordPressの使い方