お手軽WordPress Tips:ページテンプレート機能で作った固定ページだけをサイト内の検索結果から除外する

Ads

ちょっとご質問頂いたのでメモがてら
記事にします。WordPressには固定ページ
でテンプレート機能というものが使える
んですが、これが応用が利いて地味に
便利なんです。ただ、場合によっては
ここだけ検索結果から外したい、という
場合もあるかもしれません。

ちなみにご質問内容は、以前書いた、「いいね!」するとコンテンツを見る事が出来るファンゲート対応のFacebookページをWordPressで作る手順という記事で、このテンプレート機能(詳しくはCodexで)を使ってファンゲート対応ページを作るんですが、このページだけサイト内検索から除外したい、という内容です。

[※すみません、このコードではダメですね・・調査不足でした。現在調整中ですが、代替案だけ書いておきます]

コード

ご利用のsearch.phpの一番上とかis_search()以下にあるループ(if (have_posts())~)よりも上に以下のようなコードを含めます。

<?php global $wp_query;
query_posts(
	array_merge(
		array('post__not_in' => array(固定ページのID)),
		$wp_query->query
	)
);?>

特定のカテゴリを除外したい

query_posts('cat=-15&s=' . get_search_query());

除外したいカテゴリID(上記例なら15)を-(マイナス)にします。15を除外してからsearch_queryをgetみたいなね!

カスタム投稿タイプの場合

カスタム投稿タイプの場合はfunctions.phpで操作できます。

function my_custom_init() {
    register_post_type( 'video', array(
        'label' => 'ワンコ動画',
         ・
         ・
         ・
        'exclude_from_search' => false,
        'has_archive' => true
    ));
}

register_post_typeの因数に’exclude_from_search’ => false,を含めます。

もっと手軽な方法あるんですかね?

他にも除外したい記事やページもあるかと思います。そんな時はCodexのテンプレートタグ/query postsを見て書いてみてください。

しかし、こういった情報は公式のフォーラムでご質問されたほうが情報も確実で勉強にもなると思います。若干言葉の使い方がアレな方も見かけますが一応良い人もいますので、ぜひお気軽にトライしてみてください。