本文へ移動
WORDPRESS DEVELOPMENT NOTEWordPress

WordPressでカスタム投稿を検索対象にする方法と機能強化ガイド

ARTICLE / 38845
EDITORIAL POLICY

実際のWordPress画面と運用を前提に、確認できる範囲と判断理由を分けて解説します。

CONTENTSこの記事の目次

    「検索しても自分が作ったコンテンツが見つからない」——そんなストレス、意外と多いです。WordPressの標準検索は投稿(post)中心に動くため、カスタム投稿タイプ(CPT)やACFなどのカスタムフィールドを追加しても、そのままでは検索結果に出ないことがよくあります。まずは結論:設定を確認して簡単なコード変更か専用プラグインでインデックス化すれば、発見性と滞在時間を大きく改善できます。1

    この記事では、初心者でも分かる手順から実務で使えるプラグイン比較、パフォーマンス対策、ライブ検索の注意点まで、実際に試せる具体例を提示します。既存プラグインで対応できない要件があれば、カスタムプラグイン開発で解決できますので、後半で私のサービスも紹介しています(ご相談は気軽にどうぞ)。

    目次

    WordPress検索でカスタム投稿を含めるべき理由(SEOとUXで得られる効果)

    検索にカスタム投稿を含めると、ユーザーが求めるコンテンツに直接たどり着けるためサイトの発見性が向上します。内部検索が有用だと滞在時間が伸び、直帰率低下やコンバージョン改善につながるため、SEO評価にも好影響を与えます。

    特に商品情報、事例、FAQ、イベントなどをCPTで運用している場合、検索に入れないと重要な情報が埋もれてしまいます。まずはCPTが検索対象になっているかを確認することが、改善の第一歩です。2

    まず確認する設定:register_post_typeで必ず見る3点(失敗しない基本)

    カスタム投稿を作るときに使う register_post_type のオプションで特に重要なのは、exclude_from_search、public、publicly_queryable の三つです。exclude_from_search が true だと通常の検索に含まれないので、false にするか public を true にしておきましょう。2

    さらにタクソノミーの連携や投稿ステータス(publish)も検索結果に影響します。まずは既存CPTの登録コードを確認し、問題がなければ次のステップでクエリ調整を行います。1

    コードで対応する:pre_get_postsで検索にカスタム投稿を追加する(STEP① 実例)

    簡易で安全な方法はテーマの functions.php や専用プラグインに pre_get_posts フックを追加して、検索時に main query に CPT を含めることです。is_search() と $query->is_main_query()、さらに !is_admin() を確認することで管理画面や REST/AJAX を壊さずに済みます。3

    以下は管理画面等に影響を与えない最小の実装例で、実際にコピペしてテストできます。実装後はページネーションや検索テンプレートで挙動確認を必ず行ってください。

    // functions.php に追加する最小サンプル
    add_action('pre_get_posts', function($query){
        if(is_admin() || ! $query->is_main_query()) return;
        if($query->is_search()){
            $query->set('post_type', array('post', 'your_cpt_slug'));
        }
    });
    

    タイトルだけ/メタだけに限定する方法(負荷軽減のコツ)

    全文検索で重くなる場合は、タイトルや特定のカスタムフィールドだけを対象にする設計が有効です。meta_query で特定フィールドに限定したり、タイトル一致を優先するカスタムSQLを使うことで検索コストを下げられますが、手作業のSQL拡張は保守が難しくなるため注意が必要です。4

    実務ではまず軽めの制限で様子を見て、負荷が許容できない場合にだけ専用インデックス(SearchWP等)に切り替えるのが現実的です。5

    カスタムフィールド(ACF含む)を検索に入れる現実的な選択肢

    カスタムフィールドやACFのリピーターなどを検索対象にするには、Relevanssi や SearchWP、ElasticPress といった専用プラグインでインデックスするのが実務的です。これらはフィールド単位で索引化でき、検索精度を高めるための設定も豊富です。6

    手作業で meta_value をJOINして検索する方法もありますが、大量データや複雑フィールドがある場合はパフォーマンスや保守性で不利になります。まずはプラグインでインデックス化し、どうしても特殊な要件があればカスタムプラグインで拡張するのが堅実です。

    プラグイン比較:Relevanssi・SearchWP・ElasticPressを使い分ける(短所も明記)

    中小サイトなら Relevanssi(無料+プレミアム)や SearchWP が導入コストと効果のバランスが良い選択です。Relevanssi は基本無料で使いやすく、プレミアムで ACF リピーターに対応します。SearchWP はさらに細かい重み付けやソース設定が可能です。65

    大規模サイトで高速性や高度なスコアリングが必要なら ElasticPress+Elasticsearch が有力ですが、サーバー要件や運用コストが増える点に注意してください。ElasticPress はACFリピーター対応など改善が進んでいますが、導入前に運用体制を検討しましょう。7

    大量データや精度重視なら:全文検索とインデックス戦略(Elasticsearch/ElasticPress)

    大量のコンテンツや複雑なメタを扱う場合、WP_Queryベースの検索だと速度や精度で限界があります。Elasticsearch を用いた ElasticPress は全文検索やカスタムスコアリングで精度を高められるため、大規模サイトに向きますが、ホスティング要件や監視コストが上がります。7

    中小規模は SearchWP や Relevanssiで十分改善できるケースが多く、まずはこれらでプロトタイプを作るのがおすすめです。どの方式でもインデックスの再生成や自動同期を忘れると結果の一貫性が失われるため、運用ルールを決めておきましょう。56

    ライブ検索(AJAX)でカスタム投稿を扱うときの落とし穴と対策

    ライブ検索系プラグインやテーマのAJAX実装は独自エンドポイントでクエリを作ることが多く、pre_get_posts の変更が効かない場合があります。AJAX用のフィルタが別に用意されているかを確認し、必要なら該当するフックに対して post_type を追加してください。8

    また、キャッシュやフロント側のスクリプトが古いインデックスを参照しているケースも多いので、AJAX実装を変更したらブラウザキャッシュやサーバーキャッシュをクリアして挙動確認を行いましょう。ライブ検索はUX向上に有効ですが、パフォーマンス設計が重要です。

    よくあるトラブルと即効の対処チェックリスト(SEO・表示・重複を防ぐ)

    検索結果に出ない場合は、まず CPT の exclude_from_search や public 設定、投稿ステータスをチェックしてください。次に pre_get_posts を含むカスタムコードやプラグインの設定、AJAXエンドポイントを確認します。2

    重複表示やページネーション崩れがある場合は、検索テンプレート(search.php)での出力制御や main_query の書き換えタイミングを見直してください。キャッシュ/インデックスの再生成、バックアップの確保も即効対応項目です。

    質問回答形式:ユーザーが検索しがちな疑問に短く答える(Q&A)

    Q. カスタム投稿だけを検索対象にしたい? A. pre_get_posts 内で post_type を array(‘your_cpt’) に指定すれば可能です。管理画面に影響を与えないよう !is_admin() を忘れないでください。3

    Q. ACFリピーターはどう扱う? A. Relevanssi(有料)や ElasticPress の最新機能で対応できます。自前でSQLを組むよりインデックス方式が保守と性能で有利です。67

    既存プラグインで無理な機能は作ればいい!導入事例とサービス案内

    プラグインが対応できない要件(独自スコアリング、複雑なメタ連携、外部API連携、特定条件での複合検索など)はカスタム開発で解決できます。実例:ACFの複数リレーションを組み合わせた重み付け検索や、外部DBを横断する検索エンドポイントなどが該当します。

    私はWordPress専用のプラグイン開発サービスを提供しています。既存プラグインで無理な機能は作ればいいのです!まずは要件相談から承ります:WordPress専用プラグインを開発します 既存プラグインで無理な機能を実装します | ココナラ

    導入フローと実務チェックリスト(STEP①〜③で失敗しない進め方)

    STEP① 現状確認:CPT定義、既存検索の仕組み、使用中プラグインをリストアップします。ここで exclude_from_search やAJAX実装を洗い出すと後の手戻りが少なくなります。1

    STEP② 小さく試す:まずは pre_get_posts で挙動確認、次に Relevanssi等でインデックス化を試験、本番で ElasticPress を検討するという段階的な導入が安全です。必要ならカスタムプラグインで自動同期や特殊なスコアリングを実装します。詳しい相談はこちらからどうぞ:WordPress専用プラグインを開発します

    表:導入手順と優先度(チェックリスト表)

    ステップ 作業内容 優先度
    STEP① CPT設定確認(exclude_from_search / public / 状態)
    STEP② pre_get_posts で簡易対応、検索テンプレート確認
    STEP③ Relevanssi/SearchWPでACF等をインデックス化しテスト
    STEP④ 大量データは ElasticPress + Elasticsearch を検討 低〜中(規模次第)
    運用 インデックス再生成・キャッシュ運用・バックアップ手順を整備

    まとめと次のアクション(短期改善プランと長期戦略)

    まずすぐできる優先アクションは、(1) CPTのregister_post_type設定確認、(2) pre_get_postsで簡易対応、(3) RelevanssiやSearchWPでACFをインデックス化して効果を検証することです。これで多くのサイトは短期間で検索品質を改善できます。

    要件が複雑でプラグインでの対応が難しい場合はカスタムプラグイン開発を検討してください。既存プラグインで無理な機能は作ればいいのです。相談・見積りはこちらから:WordPress専用プラグインを開発します

    参考文献
    1. 1. Is there a way to include posts from custom post type in search.php page? https://wordpress.org/support/topic/is-there-a-way-to-include-posts-from-custom-post-type-in-search-php-page/
    2. 2. Can I add custom post type to search results? https://wordpress.org/support/topic/can-i-add-custom-post-type-to-search-results/
    3. 3. Exclude some post types and a specific category https://wordpress.org/support/topic/exclude-some-post-types-and-a-specific-category/
    4. 4. Any way to filter custom posts according to main query term? https://wordpress.org/support/topic/any-way-to-filter-custom-posts-according-to-main-query-term/
    5. 5. Core SearchWP Sources https://searchwp.com/documentation/knowledge-base/core-searchwp-sources/
    6. 6. Installing Relevanssi and adjusting the settings https://www.relevanssi.com/user-manual/installing-relevanssi-and-adjusting-the-settings/
    7. 7. ElasticPress 5.2.0 released with the new ACF repeater field compatibility feature https://www.elasticpress.io/blog/2025/04/elasticpress-5-2-0-released-with-the-new-acf-repeater-field-compatibility-feature/
    8. 8. Limit AJAX search post types - Total WP Theme https://totalwptheme.com/docs/snippets/limit-ajax-search-post-types/
    WordPressで似た悩みがありますか?

    よくある不具合・機能追加・プラグインの限界を相談室で探せます。自分の環境だけで起きる場合は個別相談も可能です。

    相談室を見る
    SHARE / SAVEXで共有Facebook

    コメントを残す

    メールアドレスが公開されることはありません。 が付いている欄は必須項目です

    お問い合わせフォームへ