コンテンツにスキップ

WordPress の検索機能を無効化する方法

メインイメージ

WordPress にデフォルトで備わっている検索機能を無効化する方法を説明します。

WordPress の検索機能を無効化する方法

テーマの functions.php が編集可能な場合は、以下の手順に従ってテーマの functions.php ファイルにコードを追加します。

  1. アクティブなテーマの functions.php ファイルを開きます
  2. functions.php ファイルに次の行を追加します

    add_action( 'parse_query', 'example_search_filter_query' );
    add_filter( 'get_search_form', '__return_null' );
    
    /**
     * サイト内検索機能を無効にする
     */
    function example_search_filter_query( $query, $error = true ) {
      if ( is_search() ) {
        $query->is_search = false;
        $query->query_vars['s'] = false;
        $query->query['s'] = false;
    
        if ( $error == true ) {
          $query->set_404();
                status_header( 404 );
        }
      }
    }
    
  3. ファイルを保存します

関数名の先頭の example_ は使っているテーマの名前などに適宜変更してください。

functions.php が編集可能でない場合や編集すべきでない場合は、カスタムプラグインで設定します。

  1. WordPress インストールディレクトリの下の wp-content/plugins/ ディレクトリの下に myplugin ディレクトリを作成します
  2. 作成した myplugin ディレクトリの下に myplugin.php ファイルを作成します
  3. myplugin.php に次の内容を書き込んで保存します

    <?php
    
    /**
     * Plugin Name: My Plugin
     */
    
    defined( 'ABSPATH' ) || exit;
    
    add_action( 'parse_query', 'myplugin_search_filter_query' );
    add_filter( 'get_search_form', '__return_null' );
    
    /**
     * サイト内検索機能を無効にする
     */
    function myplugin_search_filter_query( $query, $error = true ) {
      if ( is_search() ) {
        $query->is_search = false;
        $query->query_vars['s'] = false;
        $query->query['s'] = false;
    
        if ( $error == true ) {
          $query->set_404();
                status_header( 404 );
        }
      }
    }
    
  4. プラグインを有効化します

    1. 管理者アカウントで WordPress の管理画面にログインします
    2. サイドメニューの「プラグイン」 → 「インストール済みプラグイン」をクリックします
    3. プラグイン一覧が表示されるので作成したプラグインの行の「有効化」ボタンをクリックします

      プラグイン → 「有効化」

プラグイン名は適宜変更してください。

これでサイト内検索機能が使えなくなります。

ただし、管理者や編集者はブロックエディタ使用時に検索ブロックの追加は行えるままです。 検索ブロックを使わないように運用でカバーできるならこれで問題ありませんが、念のために検索ブロックを利用不可にしたい場合は、上のコードに加えて次のコードを myplugin.php に追加します。

add_filter( 'allowed_block_types_all', 'myplugin_allowed_block_types_all', 10, 2 );

/**
 * 検索ブロックを利用不可にする
 */
function myplugin_allowed_block_types_all( $allowed_block_types, $block_editor_context ) {
    $disallowed_blocks = [
        'core/search',
    ];

    // `$allowed_block_types` は値が `true` であることがあるため
    // その場合は利用可能なブロックタイプ一覧を取得する
    if ( ! is_array( $allowed_block_types ) || empty( $allowed_block_types ) ) {
        $registered_blocks = WP_Block_Type_Registry::get_instance()->get_all_registered();
        $allowed_block_types = array_keys( $registered_blocks );
    }

    $filtered_blocks = [];
    foreach ( $allowed_block_types as $block ) {
        if ( ! in_array( $block, $disallowed_blocks, true ) ) {
            $filtered_blocks[] = $block;
        }
    }

    return $filtered_blocks;
}

以上です。

WordPress 本体の検索機能を無効化する方法として Disable Search などのコミュニティプラグインを使う方法もあるにはありますが、以下の理由によりコードを書く方法の方がおすすめです。

  • 検索機能の無効化は 10 数行のコードでできる
  • 検索機能の無効化だけを行える、よくメンテナンスされた定番のプラグインが少ない(もしくは無い)

コードを書くのが難しい場合やプラグインを使いたい強い理由がある場合などはプラグインを使う方法でもよいと思いますが、コードを書くことに抵抗が無い場合はコードを書いた方が簡潔・確実でメンテナンスもしやすいためおすすめです。

公式リファレンス

公式ブログ

確認時のバージョン

  • WordPress 6.6.2

関連ページ