ハナモゲラボ / 試行錯誤の実験人生

日々、PCや各種デバイス、楽器等に翻弄されながら電脳の森をさまよう男の日常と様々な実験をさらりと記しております。

WordPressマルチサイトで全ブログから検索結果を表示する。

May 05 2011

WordPressも3.0以降から、複数ブログの管理機能が追加されまして
(Wordpress MUはこれ以降Wordpress本体に統合されました)
ブログ増やす度にデータベース作ってインストール。。。という
面倒な作業を行う必要がなくなりました。

とはいえ、けっこうマルチサイト化するまではめんどくさいんだけど。
マルチサイト化するための一番わかりやすい手順はこちら。

で、こいつを試すべく色々いじってみてたんですが
親ブログ1+子ブログ5みたいな構成で
たとえば、親ブログの検索結果に子ブログの物も含めたい、という場合
標準機能でこれは搭載されていない様子。

親ブログで検索してみても、その親ブログの内容のみしか表示されません。
たとえばこの機能でポータルサイト的な物を作る場合には
ちょっと困ったチャンな感じ。

「あ、そうかプラグインがあるか」と色々探してはみたものの
設定がクソめんどくさい(←この性格がそもそもダメなんだが)のと
貧弱な英語力が災いして、いまいちやる気が出ない。
(プラグインではMultisite Global Searchというのがあります。)
ただし、このプラグインはウィジェットでしか検索フォームを設置できず
ヘッダーの右上に検索フォームを持ってきたい人には若干めんどくさい。

よし、それならば日本語だ、と色々探し回って見たものの
特にこれ、といったものは見つからず(探し方も悪いかもだが)
英語サイトで「これは!」というものを見つけました。

WordPress 3.0 Multisite Search
http://cleverwp.com/wordpress-3-0-multisite-search/

こいつは各テーマに含まれている(なければ作る)search.phpに
以下のコードを追加するだけで、マルチサイトすべてからの検索結果を表示するもの。

<?php

$searchfor = get_search_query(); // Get the search query for display in a headline
?>
<h1>Search results for '<?php echo $searchfor; ?>'</h1>

<?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&#91;'blog_id'&#93;);
$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'));
?>
<div id="post-<?php the_ID(); ?>" <?php post_class(); ?>>
&#60;p&#62;
&#60;span&#62;<?php the_time('Y/m/d') ?>&#60;/span&#62;
By <?php the_author_posts_link();?> &#60;/p&#62;
<h2>&#60;a href="<?php the_permalink(); ?>"&#62;<?php the_title(); ?></a></h2>
<div id="entry-content"><?php
the_excerpt();

?>
</div>
</div>

<?php

}

}
endforeach;
restore_current_blog(); // Reset settings to the current blog
?>

これで検索結果にマルチサイトすべてからのものが反映されます。

ま、いずれは管理画面からこの機能のオンオフを選べるようになる予感。

| Posted in Web関連, Wordpress | Comments (3)

3 Comments

  1. Posted 2011年7月5日 at 11:28 PM |

    いつも役に立つ記事ありがとうございます。全ブログからの検索結果取得コード、非常に活用させていただいております。
    差し支えなければ教えていただきたいのですが、上記のコードでsearch.phpを作った際に、検索結果の10件目までしか表示されないのですが、『次の10件』を表示、もしくはページングをするためにはどのようにすればよいのでしょうか?
    どうぞご回答お願いいたします。

  2. Gaku@管理人
    Posted 2011年7月20日 at 5:03 AM |

    >>teppeikawaguchi 様

    ページングに関してはちょっとわからないですねえ・・
    機会があれば挑戦してみたいとは思いますが
    今すぐはちょっとお答えできないです。
    申し訳ないです。

  3. Posted 2011年7月21日 at 1:40 AM |

    Gaku様

    お返事ありがとうございます。
    再度自分でも挑戦してみたいと思います。(私の知識では難しいかもしれませんが…)
    これからもブログは拝見させていただきますので、宜しくお願いします。

Post a Comment

※メールアドレス、URLは任意入力です。メールアドレスは入力しても公開されません。

« Jul 2017 August 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31