ワードプレスでフリーキーワード検索の機能を完全に無効化する方法

  • このエントリーをはてなブックマークに追加
  • Pocket
  • LINEで送る

本日は覚え書きです。ワードプレスに標準搭載されているフリーキーワード機能を止める方法。ワードプレスの検索機能を停止する方法はいくつか方法があるので今回は2つの種類をご紹介させていただきます。

ワードプレスでフリーキーワード検索の機能を完全に無効化する方法

WordPressでは運営中のサイトURL末尾に「/?s=」をつけると検索結果のページが表示されます。

https://wp-labo.com/?s=

ただ、ワードプレスで運営しているページが販売目的の縦長ページ(ランディングページ形式)だったり、そもそもフリーキーワード検索の必要がないようなサイトであれば検索機能そのものが必要ありません。

1. 検索結果ページを404扱いにする方法

もっともシンプルなのは「/?s=」が開かれたら「404エラー」を返す方法です。ワードプレスでは一般的にサイトURLの末尾に「/?s=」で検索リクエストがあると下記のように検索結果が画面を表示します。

また、キーワード付き「/?s=Sample Test」であれば以下のように結果を返します。画面の返し方はテーマによっても異なってきますが、検索機能が動いているときは何かしら検索結果を返すのが普通です。

functions.phpに記述する内容

この方法がもっともカンタンです。もしキーワードがあれば404ページを返します。

//検索結果ページ「/?s=keyword」のリクエストがあったら404ページを表示する
function free_keyword_search_function_invalidation( $query, $error = true ) {     
	if ( is_search() ) {
		$query->is_search = false;
		$query->query_vars[s] = false;
		$query->query[s] = false;
		if ( $error == true )
			$query->is_404 = true;
	}
}
add_action( 'parse_query', 'free_keyword_search_function_invalidation' );
add_filter( 'get_search_form', create_function( '$a', "return null;" ) );

ただ、キーワードが空だった場合はtrueにならないので404エラーを返しません。

もしキーワードが空で検索されるパターンを想定しないのであればOKです。

2. URLに「/?s」という文字列があったらトップページを開く

URLに含まれる文字列から判断してリダイレクトをかけるという方法もあります。ちなみに最後のイコールはあってもなくても結局は検索時にしか「/?s」は実行しないので「=」を文字列に含めていません。

//検索結果ページ「/?s」のリクエストがあったらトップページにリダイレクト
add_action( 'get_header', 'specified_url_redirect' );
function specified_url_redirect(){
	//現在ページ取得
	$url = $_SERVER['REQUEST_URI'];

	//URLに「/?s」という文字列が含まれていたらリダイレクト
	if(strstr($url,'/?s')){
		wp_redirect( get_site_url(), 301 );
		exit;
	}
}

この方法であればURLに「/?s」と含まれたら無条件でトップページに転送をかけています。ただ、導入テーマによっては「/?s」という文字列が予期しないタイミングで表示されるパターンも考えられるので要検証です。上記はURLに含まれる文字列を判定して「無条件でリダイレクトをかける処理」(別の指定方法も有)です。

導入テーマに「404.php」が存在する場合

下記であれば文字列で判定して「example.com/404」を開きます。固定ページで「404」というスラッグのページがなければテーマ内の「404.php」を返します。固定ページで404(/404)を作っておいてもOK。

add_action( 'get_header', 'specified_url_redirect' );
function specified_url_redirect(){
	//現在ページ取得
	$url = $_SERVER['REQUEST_URI'];

	//URLに「/?s」という文字列が含まれていたらリダイレクト
	if(strstr($url,'/?s')){
		wp_redirect( home_url('/404') );
		exit;
	}
}

存在しないディレクトリ(/404等)を指定しておけば「404.php」のテンプレートが返ってきます。先述した通り使用しているテーマのなかに「404.php」が準備されていなければ404のエラーは返ってこないのでその際は固定ページなどで「スラッグ」を指定(/404)してリダイレクト先を合わせればOKです。

ウィジェットの検索機能を使えなくする方法

検索機能を無効化するのであればウィジェトの「検索」はあらかじめ表示させない考慮も必要です。

以下をfunctions.phpに追加すればOKです。

// ウィジェットの検索ボックスを無効にする
function remove_search_widget() {
	unregister_widget('WP_Widget_Search');
}
add_action( 'widgets_init', 'remove_search_widget' );

無事「検索ウィジェット」がなくなりました。

まとめ

検索機能を無効にすると言ってもさまざまな方法があります。特にこだわりがなければCSSでサイト上から検索ボックスを消すだけでもOKです。より厳密に消すなら文字列で判定してリダイレクトをかける方法もよし。今後運営していくうえで不都合がなければどの方法でも構いません。ぜひお試しくださいませ。

最新式の無料プラグインを事前公開

WordPressは公式サイトに登録されているプラグインだけでは機能を補足しきれません。当サイトでは使いやすさを追求した魅惑的なプラグイン無料でダウンロードいただけます。運営ホームページのマーケティング力をさらに高めるチャンスです。まずは無料でDLしてお試しくださいませ。
改良されたプラグインを確認する