マルチサイト化したWordPressブログで、姉妹サイトの新着記事を表示するときのサンプルコードです。
任意のブログIDをセットして、姉妹ブログの中から現在見ているブログを除いた最新記事を取り出します。
ただ、環境によっては表示が乱れる可能性があるのでご注意下さい。
マルチサイト姉妹ブログの新着記事を表示する
こういうの作ります。
なお、動作環境はサブドメイン型で WordPress ver4.22 です。
PHP
【index.php】
<?php
global $wpdb;
$sql = '';
$ozblogs = array(1,2,3); // 取得するブログIDの配列
$oznowID = $GLOBALS['blog_id'];
$tmp = $ozblogs;
foreach($ozblogs as $blog) {
next($tmp);
switch_to_blog($blog);
if( $blog == $oznowID ) continue;
$sql .= <<<HERE
(SELECT *, $blog as blog_id
FROM $wpdb->posts
WHERE post_type = 'post'
AND post_status = 'publish')
HERE;
if(current($tmp) !== false){
$sql .= "UNIONn";
}
restore_current_blog();
}
$sql .= <<<HERE
ORDER BY post_date DESC
LIMIT 10 // 記事の総取得件数
HERE;
$posts = $wpdb->get_results($sql);
echo '<ul class="list-icon">';
foreach ($posts as $post) {
switch_to_blog($post->blog_id);
setup_postdata($post);
// 表示部
echo '<li><a href="'; the_permalink(); echo '">'; the_title(); echo '</a> <span class="whisper">'; the_time('Y.m.d'); echo '</span></li>';
}
echo '</ul>';
?>
マルチサイト化した複数のブログの新着記事を表示する[WordPress]
参照サイトのコードを元に拡張しました。
取得した記事から現在表示中のブログ記事を除外して、姉妹サイトの記事だけを表示しています。ループ中では一般的なテンプレートタグが使えるので、好みに応じて要素を組み替えられます。
カスタマイズオプション
カスタマイズ出来る値は以下の通りです。
記事を取得するブログを選択する
$ozblogs = array(1,2,3);
‘blog_id’ を配列に放り込むと、記事を取得したいブログを複数指定出来ます。
親ブログが1、以下アクティベートした順に数字が大きくなります。表示する必要がないブログがあれば適当に間引いて下さい。
記事の取得件数
LIMIT 10
件数の指定は LIMIT を書き換えます。
ブログIDの確認方法
【PHP】
<?php
$my_sites = wp_get_sites();
var_dump($my_sites);
?>
どの子ブログが何番だったか判らない場合は、ブログ情報を var_dump してパスから判断すると良いでしょう。
現在地ブログのIDを取得する方法
$oznowID = $GLOBALS[‘blog_id’];
現在表示中のブログIDは $GLOBALS に入ってます。
おことわり
なお、このコードはデータベースを書き換えます。環境やテーマファイルの構成によっては別のループに重大な影響を及ぼす可能性があることをご理解下さい。
動作的にはかなり良い感じに動くことを確認したのですが、クエリがリセットできなかったので実装コードには採用しませんでした。とりあえず途中までやってみたと言うことで備忘録として置いときます。
うまい処理方法をご存じの方はご教示下さいませ。(´・ω・`)
コメントをどうぞ(´ω`*)