WordPressカスタマイズ事例

カスタム投稿に限定してフリーワードによるページ検索をおこなう

サイト全体からページ検索するということはほとんどありません。
検索して「サイトマップ」ページとか出てきてもほとんど意味ないですもんね。
実際、コーポレートサイトなら、商品情報とか実績の中からのみ検索するケースがほとんどです。

そこでここでは、検索ターゲットをカスタム投稿タイプ(ここでは例として”result”というカスタム投稿タイプで書いています)に絞り込んで、ヒットするページの一覧を表示してみましょう。

テーマのsearch.phpに下記を記述します。
(出力するhtmlは私が適当に書いたものです。ご自身のhtmlにそう形で流用してください)

<?php

$total_results = $wp_query->found_posts;
$search_query = get_search_query();

$html = '検索キーワードに一致する事例はありません。';

if( $total_results >0 ){
	if(have_posts()){

		$html = '<div class="row">';

		while(have_posts()){

			the_post();

			$html .= '<div class="col-sm-6 mb-20">';
			$html .= '<div class="mt-10"><a href="'.get_the_permalink().'" >'.get_the_title().'</a></div>';
			$html .= '</div>';

		}

		$html .= '</div>';

	}
}

echo $html;

次に、テーマのfunction.phpに下記を記述します。

/* 検索窓をショートコード化します */
if ( ! function_exists( 'top_search_box' ) ){
	function top_search_box() {
		global $post;

		$search_query = get_search_query();

		$html = '<form role="search" method="get" id="searchform" class="searchform" action="'.home_url( '/' ).'result/">
				<div>
					<input type="text" value="'.$search_query.'" name="s" id="s" />
					<input type="hidden" name="post_type" value="result">
					<input type="submit" id="searchsubmit" value="検索" />
				</div>
			</form>';

		return $html;
	}
	add_shortcode('top_search_box', 'top_search_box');
}

/* 空文字検索ではresultにリダイレクト */
function empty_search_redirect( $wp_query ) {
	if ( $wp_query->is_main_query() && $wp_query->is_search && ! $wp_query->is_admin ) {
		$s = $wp_query->get( 's' );
		if ( empty( $s ) ) {
			wp_safe_redirect( home_url('/').result );
			exit;
		}
	}
}
add_action( 'parse_query', 'empty_search_redirect' );

最後に、検索窓を表示したい場所でショートコード top_search_box を呼べば完了です。

※ 複合キーワードでも検索できますが、全角スペース区切りは無効です。
  有効にするは、WordPressに標準でバンドルされているプラグイン”WP Multibyte Patch”を有効にしてください。


その他のWordPressカスタマイズ事例