WordPress maaguu (^^; com 北海道札幌でホームページ制作を楽しむ

WordPress, WordPress MU(μ) についての話題、プラグイン作成、カスタマイズ。

「2009年1月」の記事

WordPress MUで全てのブログを統合したサイトマップを作る #1[Permanent Link]

全ブログを含んだサイトマップ(全記事一覧)を作ろうと思います。基本はホームに表示している各ブログの新着記事と同様で、単純に表示件数を限定していないだけです。

新着記事表示は以下をご覧ください。

指針
ページの投稿欄に直接コーディングする
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;
?>

タブ化はまだ今度。

あ、と、今気づいたのですが、サイトマップなのに、ブログエントリーだけでページとかアーカイブが入ってなかったです(^^ゞ

ポイントを現金でキャッシュバック

WordPress MUのトップページに、RSSフィードを取得して各ブログの新着記事を日付順にソートして表示する[Permanent Link]

以下の記事の方法では、各ブログ毎の新着記事が表示されます。

これをひとまとめに日付順にソートして表示したいなあ、と思って作ってみたのがこれです。

上記の記事をRSSフィードを取得して書くこともできますので、今回はその方法でばばーっと書いてみました。ホームページでhome.phpを使っているのでしたら、home.phpに以下ののコードを記述します。一応エラーもなく表示されているようです。

<?php
include_once(ABSPATH . WPINC . '/rss.php');

//フィードのURI
$rss_arr = array(
    'http://log.maaguu.com/feed/',
    'http://wp.maaguu.com/feed/',
    'http://pp.maaguu.com/feed/'
);

//表示件数
$num = 10;

foreach($rss_arr as $uri)
{
    $rss = fetch_rss($uri);

    $title = $rss->channel['title'];
    $link  = $rss->channel['link'];

    foreach($rss->items as $item)
    {
        $item_title = $item['title'];
        $item_link  = $item['link'];
        $item_date  = $item['pubdate'];
        $out_item_date  = date('Y年n月j日', strtotime($item_date));

        $out_item = '<dt>
                         <a href="' . $item_link . '">' . $item_title . '</a>
                     </dt>
                     <dd style="font-size:77%;">
                         <a href="' . $link . '">' . $title . '</a>
                     </dd>
                     <dd style="font-size:77%;">' . $out_item_date . '</dd>';

        $unix_time = date('U', strtotime($item_date));
        $item_arr[$unix_time] = $out_item;
    }
}

//ソート
krsort($item_arr);

//出力
echo '<h2>新着' . $num . '件</h2>';

echo '<dl>';

for(reset($item_arr); $key = key($item_arr); next($item_arr))
{
    echo $item_arr[$key];

    ++$count;

    if($count === $num)
    {
        break;
    }
}

echo '</dl>';
?>

表示はこのようになります。

ソートして表示した画像での例

ポイントを現金でキャッシュバック
Email to maaguu:info@mx.maaguu.com Powered by WordPress MU Clicky Web Analytics