RSSと投稿記事を交互に表示させたい
内容の修正が必要ですが原因がわかりません
1.投稿に画像やカテゴリーなどが表示されず、タイトルと日付けのみ表示されている
2.RSS画像にURLがついておらず画像のみ表示されている
3.RSSの画像がない場合ダミー画像を表示させたいが書き方が調べてもわからない
<?php
$dbh = connect_db();
$categories = [];
foreach (get_categories() as $category) {
$categories[$category->cat_ID] = $category;
}
function set_other_data($post)
{
// アイキャッチIDを取得
$post_thumbnail_id = get_post_thumbnail_id($post);
// アイキャッチ画像の確認
if ($post_thumbnail_id) {
// 存在する
$image_src = wp_get_attachment_image_src($post_thumbnail_id);
// サムネイルの画像URLを設定
$post->thumbnail = $image_src[0];
} else {
// 存在しない
$post->thumbnail = 'noimage.jpg';
}
// カテゴリーIDを取得
$post->categories = wp_get_post_categories($post->ID);
// コメントテキスト
if (0 == $post->comment_count) {
// コメントなし
$post->comments = __('No Comments');
} else {
// コメントあり
$post->comments = $post->comment_count.'件のコメント';
}
// コメントリンク
$post->comments_link = get_comments_link($post->ID);
}
delete_old_rss($dbh);//接続オブジェクトを渡す
//RSS保存
$dbh = connect_db();//①
$stmt = $dbh->prepare('insert into rss_feed (title, link, date, img) values (?, ?, ?, ?) on duplicate key update title=?, link=?, date=?, img=?');//②
$url1 = get_rss_site_url();
foreach ($url1 as $url) {
if (($rss = @simplexml_load_file($url)) === false) {
continue;
}
foreach ($rss->item as $item) {
$dc = $item->children('dc', true);
$date = date('Y-m-d H:i:s', strtotime($dc->date));
if ($date < $delete_date) {
continue;
}
$title = $item->title;
$link = $item->link;
$content = $item->children('content', true);
$result = preg_match('/<img[^>]*src=\"([^"]+)\"[^>]*>/i', $content->encoded, $matches);
if (1 == $result) {
$img = $matches[1];
} else {
$img = '';
}
$stmt->execute([$title, $link, $date, $img, $title, $link, $date, $img]);
}
}
if (ctype_digit($_REQUEST['page'])) {
$current_page = (int) $_REQUEST['page'];
} else {
$current_page = 1;
}
if ($current_page > $wp_query->max_num_pages) {
$current_page = $wp_query->max_num_pages;
}
$block_per_page = 2;
$rss_per_block = 18;
$posts_per_block = $wp_query->post_count / $block_per_page;
//RSS読み込み
$rss_per_page = $block_per_page * $rss_per_block;
$rss_offset = ($current_page - 1) * $rss_per_page;
$sql = 'SELECT * FROM rss_feed ORDER BY date DESC LIMIT ?,?';
$stmt = $dbh->prepare($sql);
$stmt->bindParam(1, $rss_offset, PDO::PARAM_INT);
$stmt->bindParam(2, $rss_per_page, PDO::PARAM_INT);
$stmt->execute();
$rss_items = $stmt->fetchAll(PDO::FETCH_OBJ);
$posts_per_page = $block_per_page * $posts_per_block;
$posts_offset = ($current_page - 1) * $posts_per_page;
$args = [
'posts_per_page' => $posts_per_page,
'offset' => $posts_offset,
];
$post_items = get_posts($args);
//表示
for ($i = 0; $i < $block_per_page; ++$i) {
echo '<h2>ブロック</h2>';
echo '<h3>RSS</h3>';
for ($j = 0; $j < $rss_per_block; ++$j) {
$item_index = $i * $rss_per_block + $j;
if ($item_index >= count($rss_items)) {
break;
}
$item = $rss_items[$item_index];
echo '<ul>';
echo "<li class=\"sitelink\"><a href=\"{$item->link}\">{$item->title}</a></li>";
echo "<li class=\"sitelink\"><a href=\"{$item->link}\">site</a></li>";
echo "<li class=\"sitedate\">{$item->date}</li>";
if (!empty($item->img)) {
echo "<li><img src=\"{$item->img}\" width=\"100\"></li>";
}
echo '</ul>';
}
echo '<h3>投稿</h3>';
for ($j = 0; $j < $posts_per_block; ++$j) {
$item_index = $i * $posts_per_block + $j;
if ($item_index >= count($post_items)) {
break;
}
$item = $post_items[$item_index];
echo '<ul>';
echo "<li><a href=\"{$item->guid}\">{$item->post_title}</a></li>";
echo "<li>{$item->post_date}</li>";
echo '</ul>';
}
}