自力で、と言いつつ以下のサイトのコードを参考にさせてもらってます(汗&感謝!
→WebTecNote – (PHP) ページング機能の仕組みとか作り方とか
前に記事「WordPress3.0で子サイトの新着記事一覧を表示するテンプレートを書いてみた 」のコードの応用です。
前記事のはHOMEで数件表示出来れば良かったのですが、一覧ページを準備するとページングする必要が出てきました。
しかし、子サイトを抜き出す処理は力技で、query的な書き方じゃなかったので、Wordpressのページングでお馴染みのプラグイン「WP-PageNavi 」はやっぱり使えませんでした。
なので仕方ないので自分で書くことに。
こんな条件で書きました。
- 表示場所:全サイトの記事一覧を固定ページ「お知らせページ」
- ページのURL: http://****.com/news/
- 固定ページ「お知らせ」を新規登録
- パーマリンク : news
- 「お知らせ」用にテンプレートファイルを準備
- テンプレートファイル: ***/themes/*****/page-news.php
表示処理はテンプレートファイル( ***/themes/*****/page-news.php )に、
ページング用関数は同テーマ内の関数用PHP( ***/themes/*****/function.php ) に記述します。
「お知らせ」: /themes/*****/page-news.php
記事の表示部分(子サイト名を出すかどうか等)はお好みでカスタマイズしてください。
[php]
‘post’ , ‘paged’ => $paged ));
//sidebar等で判別するための変数定義(判別しないなら不要)
$pageType = ‘news’;
$entryAry = array(); //全てサイトの記事を格納する連想配列
$pageURI = get_permalink(); //今表示してるページのURI取得(ページングのリンク用)
$paged = get_query_var(‘paged’); //urlのページ数指定を取得
//▼全てのブログの記事一覧を取得する
//マルチサイト毎に記事を取得する
for ($i = 0; $i < get_blog_count(); $i++) {
$blog_lists = get_blog_list();
$blog_id = $blog_lists[$i]['blog_id'];
//ブログのサイト名とURLを取得(get_blog_option実行前に取得しないとおかしくなる)
$siteurl = get_blog_option($blog_id,'siteurl');
$blogname = get_blog_option($blog_id,'blogname');
//ブログ切替
$wpdb->set_blog_id($blog_id);
query_posts(“showposts=3&post_status=publish”);
if (have_posts()) {
//タイムスタンプをキーに記事情報を格納
while(have_posts()) { the_post();
$get_post_time = $post->post_date;
$unix_time = strtotime($get_post_time);
$entryAry[$unix_time][‘quid’] = $post->guid;
$entryAry[$unix_time][‘ID’] = $post->ID;
$entryAry[$unix_time][‘title’] = $post->post_title;
$entryAry[$unix_time][‘date’] = date(‘Y/n/j’, strtotime($post->post_date));
//ブログのサイト名とURLを格納
$entryAry[$unix_time][‘siteurl’] = $siteurl;
$entryAry[$unix_time][‘blogname’] = $blogname;
$entryAry[$unix_time][‘blog_id’] = $blog_id;
}
}
}
//記事があれば表示処理
if ( count($entryAry)>0 ) : ?>
-
= $count){break;}
- “>
-
‘;
paging($pageURI,$limit,$page);
echo ‘
$v = $entryAry[$entryIndex[$j]]; //タイムスタンプ順の記事を表示
?>
コメント