投稿日:2017/10/25
親サイト、子サイトがいくつかある状態で
親サイトに各サイトの記事を表示させたいときの話。
http://www.nfa-es.co.jp/ 物件参照
使える関数が
switch_to_blogです。
https://wpdocs.osdn.jp/%E9%96%A2%E6%95%B0%E3%83%AA%E3%83%95%E3%82%A1%E3%83%AC%E3%83%B3%E3%82%B9/switch_to_blog 普段、記事を取得するのに
new WP_Queryを使っていると思うのですが
それをマルチサイト上の他のサイトの記事も取得したい場合
switch_to_blogを使えば普段通り記事が取得できるようです。 switch_to_blogを使用したら
restore_current_blogでサイトの状態をリセットします。
https://elearn.jp/wpman/function/restore_current_blog.html
$dataを整形してhtmlに組み込めばokです。 参照:
https://qiita.com/shunhikita/items/db13d9e2f6d33b7ea2fb
http://arakaze.ready.jp/archives/2194
http://php.net/manual/ja/array.sorting.php
https://wpdocs.osdn.jp/%E6%97%A5%E4%BB%98%E3%81%A8%E6%99%82%E5%88%BB%E3%81%AE%E6%9B%B8%E5%BC%8F
http://memo-tan.com/wordpress/wp-get-sites_20131029.html
wordpressはありとあらゆる関数が用意されているので
その関数さえ見つけて使用すれば、思っていたより簡単にできた、みたいなことが
あります。
(例)各サイトのカテゴリtopicsの記事を取得して最大8件の記事を表示させたい。
ショートコード化して表示させること前提。http://www.nfa-es.co.jp/ 物件参照
<?php
//
add_shortcode( 'topic', function($atts) {
$blog_id_arr = array(1,2,3);//取得するブログIDの配列
foreach($blog_id_arr as $blog_id) {
//各サイトのカテゴリtopicsの記事データ取得
$data = get_topics_post($blog_id);
foreach ($data as $d) {
$topics[$d['time']] = $d;
}
}
//新着順に並び替え
krsort($topics);
$i = 0;
$html = '<div class="row row_inline sp_image_cols sp_col2 tile">';
foreach ($topics as $topic) {
$html .= '<div class="col span_3"><p><span class="data">'.$topic['date'].'</span><br />';
$html .= '<a href="'.$topic['link'].'">'.$topic['title'].'</a></p></div>';
if($i == 7) { break; }
$i++;
}
$html .= '</div>';
return $html;
} );
function get_topics_post($site_id) {
$post_arr = array();
switch_to_blog($site_id);
$args = array(
'category_name' => 'topics',
'posts_per_page' => 20
);
$the_query = new WP_Query( $args );
if($the_query->have_posts()) {
$i = 0;
while ( $the_query->have_posts() ) : $the_query->the_post();
$post_arr[$i]['title'] = get_the_title();
$post_arr[$i]['link'] = get_the_permalink();
$post_arr[$i]['date'] = get_the_date('Y/m/d');
$post_arr[$i]['time'] = get_the_date('YmdGis');//キーで降順に直すためのデータ
$i++;
endwhile; wp_reset_postdata();
}
restore_current_blog();
return $post_arr;
}
解説
マルチサイトで他のサイトの記事を取得したい場合使える関数が
switch_to_blogです。
https://wpdocs.osdn.jp/%E9%96%A2%E6%95%B0%E3%83%AA%E3%83%95%E3%82%A1%E3%83%AC%E3%83%B3%E3%82%B9/switch_to_blog 普段、記事を取得するのに
new WP_Queryを使っていると思うのですが
それをマルチサイト上の他のサイトの記事も取得したい場合
switch_to_blogを使えば普段通り記事が取得できるようです。 switch_to_blogを使用したら
restore_current_blogでサイトの状態をリセットします。
https://elearn.jp/wpman/function/restore_current_blog.html
$data = get_topics_post($blog_id);
でデータを取得しているので$dataを整形してhtmlに組み込めばokです。 参照:
https://qiita.com/shunhikita/items/db13d9e2f6d33b7ea2fb
http://arakaze.ready.jp/archives/2194
http://php.net/manual/ja/array.sorting.php
https://wpdocs.osdn.jp/%E6%97%A5%E4%BB%98%E3%81%A8%E6%99%82%E5%88%BB%E3%81%AE%E6%9B%B8%E5%BC%8F
http://memo-tan.com/wordpress/wp-get-sites_20131029.html
余談
クエリを書いて記事を取得することも可能ですがwordpressはありとあらゆる関数が用意されているので
その関数さえ見つけて使用すれば、思っていたより簡単にできた、みたいなことが
あります。