投稿日:2022/06/16
WP内の投稿とrssの投稿をまとめて新着順に表示する方法です。
EC案件のオプション商材「新着情報一括表示ソース」のイメージです。
超過です。
変更する場合はrssにより引き出される件数を必ず確認してください。
現在アメブロは最大10記事なので、最大件数を増やすことはできません。
/public_html/wp-content/themes/テーマ/functions/custom
EC案件のオプション商材「新着情報一括表示ソース」のイメージです。
超過です。
注意点
・最大件数
ソース上は10件になっています。変更する場合はrssにより引き出される件数を必ず確認してください。
現在アメブロは最大10記事なので、最大件数を増やすことはできません。
・ラベル部分
投稿タイトルの前に「カテゴリー名:」か「ブログ:」と出るようになっています。見た目は案件ごとに調整してください。方法
何も表示されない場合はrssのURL・スラッグが正しいかを確認の後、それぞれデフォルトのショートコード(news/rss)で表示されるかも確認してください。・ショートコード
[mix_list url="表示させたいURL" slug="表示させたいカテゴリー" per="10"]
・php
作成してサーバーにアップしてください。/public_html/wp-content/themes/テーマ/functions/custom
shortcode-mix_list.php
<?php
//[mix_list url="表示させたいURL" slug="表示させたいカテゴリー" per="10"]
add_shortcode('mix_list', function ($atts) {
extract(shortcode_atts(array(
'url' => '',
'per' => '10',
'slug' => null,
), $atts));
$mix_list = array();
//RSSデータ取得
include_once(ABSPATH . WPINC . '/feed.php');
$rss = fetch_feed($url);
$maxitems = 0;
if (! is_wp_error($rss)) :
$maxitems = $rss->get_item_quantity();
$rss_items = $rss->get_items(0);
endif;
// SimplePieのget_dateでWordPressのUTCに変換してしまうので、一時的にTokyoにセット。デフォルト値をストックし最下部で書き戻し。
$tz = date_default_timezone_get();
date_default_timezone_set('Asia/Tokyo');
ob_start();
//取得投稿データ設定
$paged = get_query_var('paged');
$args = array(
'paged' => $paged,
'category_name' => $slug,
'post_type' => 'post'
);
$the_query = new WP_Query( $args );
//RSSデータを配列に追加
if ($maxitems != 0){
foreach ($rss_items as $item) {
$esc_url = esc_url($item->get_permalink());
$esc_html = esc_html($item->get_title());
$mix_list[] = array($esc_url, $item->get_date('Y/m/d'), $esc_html, "ブログ");
}
}
//投稿データの取得及び配列への追加
if($the_query->have_posts()) {
ob_start();
while ( $the_query->have_posts() ) {
$the_query->the_post();
$categories = get_the_category();
$category_name = $categories[0]->name;
$mix_list[] = array(get_the_permalink(), get_the_time('Y/m/d'), get_the_title(), $category_name);
}
wp_reset_postdata();
}
//配列のソート実行
foreach ($mix_list as $key => $row) {
$date[$key] = $row[1];
}
array_multisort($date, SORT_DESC, $mix_list);
?>
<dl>
<?php
$count = 1;
foreach($mix_list as $item):
if($count > $per){
break;
}
?>
<dt><p><?= $item[1] ?></p></dt>
<dd><p><a href="<?= $item[0] ?>"title="<?= $item[2] ?>" <?php if($item[3] == "ブログ"){ ?>target="_blank"<?php } ?>><?= $item[3] ?>:<?= $item[2] ?></a></p></dd>
<?php
$count++;
endforeach;
?>
</dl>
<?php
date_default_timezone_set($tz);
return ob_get_clean();
});