WordPress MUで全てのブログを統合したサイトマップを作る #1[Permanent Link]
- 2009年1月22日 23時09分
- WordPress MU | tips
- No Comments
全ブログを含んだサイトマップ(全記事一覧)を作ろうと思います。基本はホームに表示している各ブログの新着記事と同様で、単純に表示件数を限定していないだけです。
新着記事表示は以下をご覧ください。
- 指針
-
- ページの投稿欄に直接コーディングする
- PHPコードはエスケープされますので、プラグインを使おうと思います。
- タブによるインターフェイスにする
- ページが縦に長大になってしまいそうなので、タブで表現しようと思います。
まずは、投稿欄に直接コーディングするため、runPHPプラグインを入れます。page.phpに直接コードを記述するのが手っ取り早いのですが、後に他にページを使うかもしれませんのでこのようにしてみました。
と、runPHPをインストールしてみましたが使えません。ではExec-PHPをと思い、インストールしましたが、これも上手く動きません(動くらしいのですが……)。
なので、プラグインを使えるようにするのはあっさりと諦め、他の方法で行くことにしました。
「ページ」は他にも使うことを想定すると(例えばプロフィールページとか)、page.phpには、サイトマップページが表示される場合に、サイトマップ表示用のコードが呼び出されるようにする必要があります。
今回は、ページのIDがサイトマップページのIDのときにコードが実行されるようにしてみます。
ページのIDは以下の記述で取得することができますので、まずはページを作成し、page.phpに以下のコードを記述して表示させてみます。
<?php echo $post->ID; ?>
95と表示されたとしますと、サイトマップのページIDは95です。
Conditional Tags « WordPress Codexによると、is_page()を使うとページの判別ができるらしいので、サイトマップ表示用のコードを以下で囲んでみます。
if (is_page('95')) :
[...]
endif;
以下コード全文です(簡略化しています)。
<?php
if (is_page('95')) :
for ($i = 0; $i < get_blog_count() - 1; $i++) :
$blog_list = get_last_updated();
$blog_list = $blog_list[$i]['blog_id'];
if ($blog_list != 1) :
$out_blogname = get_blog_option($blog_list, 'blogname');
$output_blogs = '<h3><a href="' .
get_blog_option($blog_list, 'siteurl') . '">' .
$out_blogname .
'</a></h3>';
echo $output_blogs;
$wpdb->set_blog_id($blog_list);
query_posts("showposts=10000&post_status=publish");
?>
<ul>
<?php if (have_posts()) : while(have_posts()) : the_post();?>
<li><a href="<?=$post->guid;?>"><?=$post->post_title;?></a></li>
<?php endwhile; endif; wp_reset_query(); endif;?>
</ul>
<?php
endfor;
endif;
?>
タブ化はまだ今度。
あ、と、今気づいたのですが、サイトマップなのに、ブログエントリーだけでページとかアーカイブが入ってなかったです(^^ゞ



