TECHBLOG

WordPress > 標準設定

WordPress検索に関する初期設定

Create:

Category:WordPress標準設定

Series:WordPress初期設定

[ Version.19 ]

概要

サイト内検索の標準仕様を頻出仕様に初期設定。

全サイト共通設定により、functions.php に記載せず functions_init.php に記述しinclude。

functions.php
include_once 'xxx/functions_init.php';

以下、functions_init.php

検索結果用テンプレート(カスタム投稿タイプ)

カスタム投稿タイプのテンプレートを「search-投稿タイプ名」で常時設置できるように標準設定。

add_filter('template_include', function ($template) {
	if (is_search()) {
		$this_post_type = get_query_var('post_type');
		if ($this_post_type !== 'any') {
			$temp_path = TEMPLATEPATH . '/search-' . $this_post_type . '.php';
			if (file_exists($temp_path)) {
				$template = $temp_path;
			}
		}
	}
	return $template;
});

検索結果の設定

検索結果は「post_title」と「post_meta」をOR検索する仕様を標準にしています。

add_action('pre_get_posts', function ($q) {
	if ($title = $q->get('_meta_or_title')) {
		add_filter('get_meta_sql', function ($sql) use ($title) {
			global $wpdb;
			static $nr = 0;
			if (0 != $nr++) {
				return $sql;
			}
			$sql['where'] = sprintf(
				' AND ( %s OR %s ) ',
				$wpdb->prepare("{$wpdb->posts}.post_title like '%%%s%%'", $title),
				mb_substr($sql['where'], 5, mb_strlen($sql['where']))
			);
			return $sql;
		});
	}
});
loading