【WordPress】検索結果から「固定ページ」を除外する方法。

Ads by Google

Wordpress Logo

WordPress で構築したサイトで、基本機能の[サイト内検索]を使ったとき、検索結果から「固定ページ」を除外する方法を紹介します。
コレ、かなり需要があるテクニックなんですよね。

いくつか方法がありますが、今回提案する方法は2つ。
「query_posts」を使う方法と、「input type="hidden"」を使う方法です。

「query_posts」を使う方法

デフォルトの仕様では検索結果に「投稿」だけでなく「固定ページ」も表示されるようになっています。そこで、ループ処理の直前で[query_posts]を使い、検索結果から「投稿」のみを表示するように設定します。

通常、テンプレートの「search.php」などで、ループ処理は以下のように記述されていると思います。

<?php if (have_posts()) : ?>
<ul>
<?php while (have_posts()) : the_post(); ?>
<li><a href="<?php the_permalink(); ?>"><?php the_title(); ?></a>
<?php endwhile; ?>
</ul>
<?php endif; ?>

このコードの前に[query_posts]の処理を挿入します。

<?php // 検索結果からページを除外
	global $query_string;
	query_posts($query_string . "&post_type=post");
?>

<?php if (have_posts()) : ?>
<ul>
<?php while (have_posts()) : the_post(); ?>
<li><a href="<?php the_permalink(); ?>"><?php the_title(); ?></a>
<?php endwhile; ?>
</ul>
<?php endif; ?>

<?php wp_reset_query(); ?>

このように、「post_type=post」と指定することで「投稿」のみを表示させることができます。

ちなみに「post_type」で指定できる引数には、他に以下のようなものがあります。

any
初期値。リビジョン以外の投稿タイプを取得
post
投稿
page
ページ
attachment
添付ファイル
revision
変更履歴

注意点として、「query_posts」を使うときは、ループ処理の最後に必ず「<?php wp_reset_query(); ?>」と記述してクエリーをリセットしましょう。

「input type="hidden"」を使う方法

続いて紹介するのは、検索フォームの中に「input type="hidden"」という隠し要素を埋め込んでしまう方法です。
ループ処理を弄らずに解決できるので、もしかするとコチラのほうがスマートかもしれません。

やり方は簡単で、検索フォームを以下のように書き換えるだけで済みます。

<form method="get" action="<?php bloginfo('url'); ?>">
	<input type="hidden" name="post_type[]" value="post">
	<input name="s" id="s" type="text">
	<input id="submit" type="submit" value="検索">
</form>

検索結果に含めたい「post_type」を「value」要素で指定しています。
デメリットとしてはURLに「&post_type」と表示されてしまうことでしょうか。

その他の方法

「検索結果に固定ページを含めない」ために、他の代替案として[functions.php]で処理を行う方法もあります。

しかし、[functions.php]はただでさえコードが長くなってしまいがちなので、なるべくなら今回提案した2つの方法のいずれかで解決したほうがいいように思います。
参考になれば幸いです。

こちらの記事もいかがですか?

アナタにオススメ!
同じカテゴリーの他の記事です。

Ads by Google