マルチサイト化したWordpressの親サイトで子サイトの記事の一覧を表示します。
get_blog_list()が非推奨になったのでどうしようかと思っていたら、便利なプラグインを作成してくださった方がいらっしゃいました。感謝。
Foreignkey, Inc.さんのプラグイン「WP Over Network」をありがたく使わせていただきました。
プラグイン名:WP Over Network
日本語の説明:http://foreignkey.jp/archives/1192
公式ディレクトリ:http://wordpress.org/plugins/wp-over-network/
プラグインをインストールして有効化すると、 ネットワークブログの一覧や投稿を取得する関数やウィジェットが使用できるようになります。
各サイトの新着5件をサイトごとに表示
各ブログのIDをWP Over Networkの関数を使って取得して、Wordpressのテンプレートタグ「switch_to_blog」のIDに入れて、foreachで回してやる。という説明でいいのかなぁ。
記事のループはloop-home.phpという別ファイルに記述して読みこむようにしました。
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
<?php $posts = wponw::get_blogs('exclude_blog_ids=1&post_type=post&affect_wp_query=true'); global $post; foreach ( $posts as $post ): switch_to_blog( $post->blog_id ); $post = get_post( $post->ID ); ?> <h2><?php bloginfo(name); ?></h2> <ul> <?php get_template_part( 'loop','home' ); ?> </ul> <?php restore_current_blog(); endforeach; ?> <?php wp_reset_query(); ?> <?php switch_to_blog(3) ?> <h2><?php bloginfo(name); ?></h2> <ul> <?php get_template_part( 'loop','home' ); ?> </ul> <?php restore_current_blog(); ?> <?php wp_reset_query(); ?> |
|
1 2 3 4 5 6 7 8 9 10 |
<?php $args = array( 'posts_per_page' => 5, 'post_type' => array( 'post', 'monology' ),'orderby' => 'id',); //monologyはカスタム投稿タイプ名 $myposts = get_posts( $args ); foreach($myposts as $post) : setup_postdata($post); ?> <li><a href="<?php the_permalink(); ?>"><?php the_title(); ?></a></li> <?php endforeach; ?> <?php wp_reset_query(); ?> |
各サイトのカスタム投稿タイプ名も取得して入れるようにしたいけれど、どのようにしたら良いのか分からないです。
各サイトの記事を混ぜて一覧表示
各サイトの新着記事を全部混ぜて、新しい日付順に並べて表示します。
ページ送りもできます。こちらはプラグインに含まれているテンプレートのコード、ほぼそのままです。
サイト名のところは、各サイトのロゴとかにすると良さそうですね。
|
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 |
<ul> <?php $posts = wponw::get_posts('exclude_blog_ids=1&post_type=post&affect_wp_query=true'); global $post; wp_pagenavi(); foreach ( $posts as $post ): switch_to_blog( $post->blog_id ); $post = get_post( $post->ID ); $the_date = mysql2date( get_option( 'date_format' ), $post->post_date ); ?> <li> <?php if ( current_theme_supports( 'post-thumbnails', $post->post_type ) ): ?> <div class="post-thum<?php ! has_post_thumbnail( $post->ID ) and print(' no-thumbnail') ?>"><?php the_post_thumbnail() ?></div> <?php endif; ?> <?php echo get_bloginfo( 'name' ); ?> <a class="post-title" href="<?php echo esc_url( get_permalink( $post->ID ) ) ?>" title="<?php echo esc_attr( get_the_title( $post ) ) ?>"><?php echo esc_html( get_the_title( $post ) ) ?></a> <?php if ( $show_date ) : ?> <span class="post-date"><?php echo apply_filters( 'get_the_date', $the_date ) ?></span> <?php endif; ?> </li> <?php restore_current_blog(); endforeach; ?> <?php wp_reset_query(); ?> </ul> |
特定の子サイトの記事のみを表示
この場合は、プラグインを使わなくても大丈夫なようです。
|
1 2 3 4 5 6 7 |
<?php switch_to_blog(3) ?>//括弧内に表示させたいブログのIDを入れる <h2><?php bloginfo(name); ?></h2> <ul> <?php get_template_part( 'loop','home' ); ?> </ul> <?php restore_current_blog(); ?> <?php wp_reset_query(); ?> |
この間phpの先生にforeachを教えてもらいました。まだ消化しきれていないので、復習しなければ。
2013年10月28日追記:
WordPress ver.3.7で「wp_get_sites()」などマルチサイトの情報を取得するタグが追加されたようです。
プラグインを使わなくてもよくなるかもしれませんので、どんな情報が取得できるのか、アップデートしたら試してみようと思います。