WEBLOG
WordPress > 標準設定
サイト内検索の標準仕様を頻出仕様に初期設定。
全サイト共通設定により、functions.php に記載せず functions_init.php に記述しinclude。
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;
});
}
});