【WordPress】サイト内検索機能をプラグイン無しで無効化する方法

WordPressのサイト内検索機能を無効化

※当ブログではアフィリエイト広告を利用しています。

こちらのエントリでご紹介しましたが、当サイトではWordPressのサイト内検索機能を悪用され、不要なキーワードで無理やりGoogleにインデックス登録させられるというスパム攻撃を受けました。

既に対策済みですが更に万全を期すためWordPressに標準搭載されているサイト内検索機能を無効化しました。その方法をメモします。

WordPressのサイト内検索機能について

WordPressには標準でサイト内検索機能が搭載されています。一般的にはget_search_form()関数でサイト内検索フォームを表示し、そこから検索したい語句を入力して検索を行います。

しかしサイト内検索フォームを表示していなくても、以下のようにサイトURLのあとにパラメータ?s=[検索語句]を付け、検索したい語句を指定する方法でもサイト内検索することが可能です。

トップページ

WordPressの設定にはサイト内検索機能を無効化するための項目が見当たらないため、完全に無効にしたい場合はfunctions.phpにサイト内検索を無効化するためのコードを追加する必要があります。

WordPressのサイト内検索機能を無効化する方法

下記の参考サイトで紹介されていたサイト内検索機能を無効化するためのコードをfunctions.phpに記述し、WordPress標準のサイト内検索機能が使われた場合それを無効化し、404ページに飛ばすようにしました。

//WordPress標準のサイト内検索機能を無効化
function fb_filter_query( $query, $error = true ) {
	
	if ( is_search() ) {
		$query->is_search = false;
		$query->query_vars[s] = false;
		$query->query[s] = false;
		
		// to error
		if ( $error == true )
			$query->is_404 = true;
	}
}

add_action( 'parse_query', 'fb_filter_query' );
add_filter( 'get_search_form', create_function( '$a', "return null;" ) );

参考サイト:How to disable the search feature in WordPress

下の画像は上記対策をするとサイトURLのあとにパラメータsを付けた場合のページを表示したものです。

WordPressのサイト内検索機能を無効化

404ページにリダイレクトされていることが分かると思います。

ちなみにWordPress標準のサイト内検索機能の代わりにGoogleカスタム検索を導入したため、当サイトのサイト内検索は今までどおりページ上部の検索ボックスより可能となっております。

おわりに

WordPressの標準機能は便利な半面、意外な方法で悪用されると設定で止められない場合に困ることになります。

もしもの時にとっさに対応するため、WordPressの標準関数の基本的な使い方は知っておきたいと思いました。