WordPressのマルチブログを横断検索するカスタマイズ方法

マルチ化したWordpress(ワードプレス)で、プラグインを使わずに、マルチブログを横断して検索するためのカスタマイズ方法を紹介します。

WordPressをマルチ化したら、子ブログから検索ボックスからブログ内検索をしたところ、有るはずの記事がヒットしなくなった。

どうやら、検索結果にエラーが出るのでマルチ化した場合、シングル状態のWordpressの検索ボックスのままではエラーがでるようだ。

それで、検索ボックスをカスタマイズついでに、マルチブログを横断して検索できるようにカスタマイズした。

マルチブログを横断して検索し、検索結果を1つのページに出すには、次のソースをテンプレート内のsearch.phpに追加するだけだ。search.phpは、サーチ結果を表示するページである。検索ボックスのあるページではないので注意して欲しい。

<?php
$searchfor = get_search_query(); // Get the search query for display in a headline
?>
<?php
$query_string=esc_attr($query_string); // Escaping search queries to eliminate potential MySQL-injections
$blogs = get_blog_list( 0,'all' );
foreach ( $blogs as $blog ):
switch_to_blog($blog['blog_id']);
$search = new WP_Query($query_string);
if ($search->found_posts>0) {
foreach ( $search->posts as $post ) {
setup_postdata($post);
$author_data = get_userdata(get_the_author_meta('ID'));
?>
<h2><a href="<?php the_permalink(); ?>"><?php the_title(); ?></a></h2>
<p><?php the_excerpt(); ?></p><p><a href="<?php the_permalink(); ?>">記事を読む</a></p>
<?php
}
}
endforeach;
restore_current_blog(); // Reset settings to the current blog
?>

上のコードをsearch.phpに追加すれば、子ブログを含めたマルチブログでの横断検索ができる。

上のコードはCSSで装飾していないので、実際に使うときは、テンプレートに合うようにCSSで検索結果のデザインをカスタマイズして欲しい。

また、サイドバーに検索ボックスが無い場合や、子ブログでマルチブログ検索した結果が親ブログに表示されるされる場合などは、次のコードをsidebar.phpに設置すると、検索ボックスを設置できる。

<h3>ブログ内検索</h3>
<form id="searchform" method="get" action="<?php bloginfo('url'); ?>">
<input type="text" name="s" id="s" size="15" class="searchform_text" />
<input type="submit" value="<?php _e('Search'); ?>" />
</form>