EC-CUBE Lab
produced by Cajiya
EC-CUBEに関するカスタマイズ方法やトラブルへの対処方法を発信

商品検索のカテゴリ制限を解除するカスタマイズ方法

公開日: 2025年09月24日 | 更新日: 2025年11月03日
商品カテゴリ・一覧・検索 検索・絞り込み強化 EC-CUBE 4系全般 Twig改修

要望や症状

商品カテゴリページから検索を実行すると、そのカテゴリ内の商品のみが検索対象となり、サイト全体の商品から検索することができません。

具体的な動作について

TOPページの検索バーを使用した場合は全商品から検索が可能です。しかし、商品カテゴリページに移動してから検索バーで検索を実行すると、現在表示中のカテゴリ内の商品のみが検索対象となってしまいます。この際、検索バー左側のカテゴリ選択部分が自動的に現在のカテゴリに固定される状態となります。

理由や原因

この問題は、EC-CUBEの標準仕様による動作です。商品カテゴリページで検索を実行する際、現在表示中のカテゴリIDが検索条件として自動的に設定される仕組みが実装されています。

この動作は、検索フォームのテンプレートまたは検索処理のコントローラにおいて、現在のページコンテキスト(カテゴリID)を検索パラメータとして引き継ぐ実装が行われているためです。これは、ユーザビリティの観点から、カテゴリページでは関連商品の検索を促進する設計思想に基づいています。

解決策

検索フォームテンプレートの修正

最も基本的な解決方法として、検索フォーム部分のTwigテンプレートをカスタマイズして、カテゴリ指定を常に無効化します。

{# app/template/default/Block/search_product.twig #}
<div class="ec-searchnavRole">
    <form name="search_product_form" id="search_product_form" method="get" action="{{ url('product_list') }}">
        <div class="ec-searchnavRole__infos">
            <div class="ec-searchnavRole__category">
                <div class="ec-select">
                    <select name="category_id" class="ec-select__select">
                        <option value="">{{ 'すべての商品' }}</option>
                        {% for Category in Categories %}
                            <option value="{{ Category.id }}">{{ Category.name }}</option>
                        {% endfor %}
                    </select>
                </div>
            </div>
            <div class="ec-searchnavRole__keyword">
                <input type="text" class="ec-searchnavRole__keywordInput" name="name" value="{{ search_form.name.vars.value|default('') }}" placeholder="キーワードを入力">
            </div>
            <div class="ec-searchnavRole__btn">
                <button type="submit" class="ec-searchnavRole__btn--search">{{ '検索する' }}</button>
            </div>
        </div>
    </form>
</div>

JavaScriptによる制御

より確実にカテゴリ選択を無効化したい場合は、JavaScriptを使用して制御することも可能です。

// app/template/default/default_frame.twig の <script> セクション内
document.addEventListener('DOMContentLoaded', function() {
    // 検索フォームのカテゴリセレクトボックスを常に「すべての商品」に設定
    const categorySelect = document.querySelector('select[name="category_id"]');
    if (categorySelect) {
        categorySelect.value = '';
        
        // セレクトボックス自体を非表示にする場合
        // categorySelect.closest('.ec-searchnavRole__category').style.display = 'none';
    }
});

検索コントローラのカスタマイズ(上級者向け)

より根本的な解決方法として、検索処理のコントローラをイベントリスナーで拡張する方法があります。

// app/Customize/EventListener/SearchListener.php
<?php

namespace Customize\EventListener;

use Eccube\Event\TemplateEvent;
use Symfony\Component\EventDispatcher\EventSubscriberInterface;

class SearchListener implements EventSubscriberInterface
{
    public static function getSubscribedEvents()
    {
        return [
            'Product/list.twig' => 'onProductList',
        ];
    }

    public function onProductList(TemplateEvent $event)
    {
        // 検索フォームのカテゴリ指定を無効化するJavaScriptを追加
        $source = $event->getSource();
        $script = '
        <script>
        document.addEventListener("DOMContentLoaded", function() {
            const categorySelect = document.querySelector("select[name=\'category_id\']");
            if (categorySelect) {
                categorySelect.value = "";
            }
        });
        </script>';
        
        $source = str_replace('</body>', $script . '</body>', $source);
        $event->setSource($source);
    }
}

設定の反映

カスタマイズした内容を確実に反映させるため、以下のコマンドを実行してキャッシュをクリアします。

# 開発環境のキャッシュクリア
bin/console cache:clear

# 本番環境のキャッシュクリア
bin/console cache:clear --env=prod

上記の方法により、商品カテゴリページからでもサイト全体の商品を対象とした検索が可能となります。

免責事項

本記事に掲載しているコードや手順は、執筆時点での情報および特定の環境下での動作確認に基づいています。 EC-CUBEのバージョン、サーバー環境、導入済みプラグインとの競合などにより、予期せぬ不具合が発生する可能性があります。

本記事の内容を実行した結果、生じた損害(データの消失、サイトの停止、機会損失など)について、当サイトおよび管理者は一切の責任を負いかねます。 実装にあたっては、必ずバックアップを取得し、検証環境(テスト環境)での動作確認を行った上で、ご自身の責任において実施してください。

この記事は参考になりましたか?

著者プロフィール: 株式会社カジヤ

当社はWeb業界の専門家として、培った経験や技術、自社事業を通して得た知見を土台に、 お客様の事業の成長を後押しすることを提供価値として活動する、Web事業の成長支援会社です。 EC-CUBE公式のパートナー制度「EC-CUBE インテグレートパートナー」に登録してしており、上位11%にあたる「ゴールドランク」に認定された実績があり、新しい通販サイトの構築から、カスタマイズ、リニューアルまで幅広く対応します。

商品カテゴリ・一覧・検索 の関連記事

商品カテゴリ・一覧・検索 機能不動作 EC-CUBE 4系全般
カテゴリ削除ボタンがグレーアウトして削除できない場合の対処法

EC-CUBEの商品管理でカテゴリ管理画面を開いた際に、削除したいカテゴリの削除ボタン(×)がグレー...

👍 0 / 👎 0 2025年10月12日
商品カテゴリ・一覧・検索 表示/テンプレート調整 EC-CUBE 4系全般
カテゴリーの一覧から、商品が紐づいていないカテゴリーのみを非表示にするカスタマイズ方法

子カテゴリー一覧を表示する際に、商品が登録されていないカテゴリーも表示されてしまう問題が発生します。...

👍 0 / 👎 0 2025年10月12日
商品カテゴリ・一覧・検索 表示/テンプレート調整 EC-CUBE 4系全般
特定カテゴリのでのみHTMLを表示するTwigのカスタマイズ方法

特定のカテゴリの商品一覧ページでのみHTMLやメッセージを表示したいが、商品一覧のTwigテンプレー...

👍 0 / 👎 0 2025年10月12日

検索・絞り込み強化 の関連記事

受注管理(管理画面) 検索・絞り込み強化 EC-CUBE 4系全般
管理画面の受注編集画面での商品追加時に、廃止商品を表示されなくするカスタマイズ方法

管理画面の受注編集画面で、商品情報セクションの「商品を追加」を行ったときに、商品の検索結果には廃止ス...

👍 0 / 👎 0 2025年10月12日
商品 検索・絞り込み強化 EC-CUBE 4系全般
管理画面の商品一覧検索で、英字大文字小文字を区別しないようにするカスタマイズ方法

EC-CUBE 4系 の管理画面において、商品一覧の検索機能で英字の大文字小文字が区別される仕様とな...

👍 0 / 👎 0 2025年10月12日

EC-CUBE 4系全般 の関連記事

商品 データ不整合 EC-CUBE 4系全般
EC-CUBEで取り扱い終了商品の削除ができない理由と対応方法

EC-CUBEでは、取り扱いを終了した商品を削除したい場合に、削除ができない状態になることがあります...

👍 1 / 👎 0 2025年10月12日
インストール・セットアップ EC-CUBE 4系全般 設定変更
EC-CUBEサイトのドメイン変更時の設定変更方法

EC-CUBEで構築したサイトを新しいドメインで公開する際に、どのような設定変更が必要かわからない場...

👍 0 / 👎 0 2025年10月12日
メール通知 通知/コミュニケーション EC-CUBE 4系全般
メール件名のショップ名を英語表記に変更する方法

EC-CUBE 4系で、メール件名の先頭に自動挿入される店舗名を英語表記に変更したい場合があります。...

👍 0 / 👎 0 2025年10月12日
フロント共通 機能不動作 EC-CUBE 4系全般
CloudFrontを利用時にリンクのドメインがEC2のパブリックDNSになってしまう問題の解決方法

EC-CUBE 4.2をAWS ECS on EC2上で構築し、CloudFrontをCDNとして利...

👍 1 / 👎 0 2025年10月12日
サイト全体 500エラー EC-CUBE 4系全般
EC-CUBEでメモリ不足エラーが発生した場合の対処方法

EC-CUBEの運用中に以下のようなメモリ不足エラーが発生することがあります。 ### エラー...

👍 1 / 👎 0 2025年10月12日

Twig改修 の関連記事

商品 表示/テンプレート調整 EC-CUBE 4系全般
会員のみに商品価格を表示するカスタマイズ方法

EC-CUBEで会員専用サイトや卸売りサイトを構築する際、商品価格をログイン前は非表示にし、会員ログ...

👍 0 / 👎 0 2025年10月12日
受注管理(管理画面) 表示/テンプレート調整 EC-CUBE 4系全般
受注一覧ページで会員番号を表示するカスタマイズ方法

管理画面の受注一覧ページで、注文者の会員番号を表示したい場合があります。 ### 表示要件 ...

👍 0 / 👎 0 2025年10月12日
帳票 帳票/出力 EC-CUBE 4系全般
納品書にお客様からのお問い合わせを表示するカスタマイズ方法

EC-CUBE 4.2.2のデフォルトの納品書出力機能では、お客様からのお問い合わせ内容(備考欄)が...

👍 0 / 👎 0 2025年10月12日
商品カテゴリ・一覧・検索 表示/テンプレート調整 EC-CUBE 4系全般
カテゴリーの一覧から、商品が紐づいていないカテゴリーのみを非表示にするカスタマイズ方法

子カテゴリー一覧を表示する際に、商品が登録されていないカテゴリーも表示されてしまう問題が発生します。...

👍 0 / 👎 0 2025年10月12日
商品カテゴリ・一覧・検索 表示/テンプレート調整 EC-CUBE 4系全般
特定カテゴリのでのみHTMLを表示するTwigのカスタマイズ方法

特定のカテゴリの商品一覧ページでのみHTMLやメッセージを表示したいが、商品一覧のTwigテンプレー...

👍 0 / 👎 0 2025年10月12日