質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
WordPress

WordPressは、PHPで開発されているオープンソースのブログソフトウェアです。データベース管理システムにはMySQLを用いています。フリーのブログソフトウェアの中では最も人気が高く、PHPとHTMLを使って簡単にテンプレートをカスタマイズすることができます。

Q&A

解決済

1回答

828閲覧

noteの投稿をRSSフィードを用いてWordPress内に一部情報が表示されなくなった

risanyan

総合スコア2

WordPress

WordPressは、PHPで開発されているオープンソースのブログソフトウェアです。データベース管理システムにはMySQLを用いています。フリーのブログソフトウェアの中では最も人気が高く、PHPとHTMLを使って簡単にテンプレートをカスタマイズすることができます。

0グッド

0クリップ

投稿2023/06/09 06:27

こちらの記事を元にnoteの投稿をRSSフィードを用いてWordPress内に表示させる実装を行いました。
https://tane-be.co.jp/knowledge/web-design/3349/

先月のタイミングでは記事通りに表示されておりましたが
今日になり確認すると一部情報が表示されなくなっておりました。

あまりphpに詳しくなく、原因が分からず困っております。
どのように修正したら良いか、教えていただけないでしょうか?

発生している問題

・アイキャッチ
・執筆者サムネイル
・執筆者名
上記3点が表示されなくなった。

タイトル・記事URL・抜粋文は正しく表示されています。

該当のソースコード

function note_feed_display($feedURL, $num, $length) { if(!$feedURL) { return false; } if(!$num) { $num = 3; } if(!$length) { $length = 20; } include_once( ABSPATH . WPINC . '/feed.php' ); $rss = fetch_feed( $feedURL ); if ( !is_wp_error( $rss ) ) { // 取得するフィードのアイテム数を設定 $maxitems = $rss->get_item_quantity($num); // 最新記事から◯件のアイテムを取得 $rss_items = $rss->get_items( 0, $maxitems ); } if ( !empty( $maxitems ) ) { if ($maxitems == 0){ echo '<!-- RSSデータがありません -->'; } else { echo '<ul class="list">'; foreach ( $rss_items as $item ) { $hash = substr($item->get_link(), strrpos($item->get_link(), '/') + 1); // localで確認する際に必要 // $options = stream_context_create(array('ssl' => array( // 'verify_peer' => false, // 'verify_peer_name' => false__ // ))); $api_data = file_get_contents('https://note.mu/api/v1/' . 'notes/' . $hash); // localで確認する際、false / $options($context)が必要 // $api_data = file_get_contents('https://note.mu/api/v1/' . 'notes/' . $hash, false, $options); $eyecatch = json_decode($api_data, true)['data']['eyecatch']; $creatorImg = json_decode($api_data, true)['data']['user']['user_profile_image_path']; $creatorName = json_decode($api_data, true)['data']['user']['nickname']; $first_img = ''; if ( preg_match('/<img.+?src=[\'"]([^\'"]+?)[\'"].*?>/msi', $item->get_content(), $matches) ) { $first_img = $matches[1]; } $description = $item->get_description(); $description = str_replace("続きをみる", "", $description); $description = strip_tags($description); if($length != 0) { $description = mb_strimwidth($description, 0, $length, "...", 'utf-8'); } echo '<li class="col">'; echo '<article class="card">'; echo '<a href="'.$item->get_permalink().'" class="card-wrapper" target="_blank" rel="noopener noreferrer">'; /** * アイキャッチ * ないときは、投稿内の1枚目の画像を * それもないときは、ダミー画像を表示させる */ if (!empty($eyecatch)){ echo '<figure class="card-thumbnail"><img src="'.$eyecatch.'" alt="'.$item->get_title().' eyecatch"></figure>'; } elseif (empty($eyecatch) && !empty($first_img)) { echo '<figure class="card-thumbnail"><img src="'.esc_attr($first_img).'" alt="'.$item->get_title().'" /></figure>'; } else { echo '<figure class="card-thumbnail"><img src="<!-- ダミー画像のパス -->" alt="'.$item->get_title().'" /></figure>'; } echo '<div class="card-contents">'; echo '<h3 class="card-title">'.$item->get_title().'</h3>'; echo '<p class="card-description">'.$description.'</p>'; echo '<time class="card-date">'.$item->get_date('Y.m.d').'</time>'; echo '<div class="card-author">'; echo '<div class="card-author-img"><img src="'.$creatorImg.'" alt="'.$creatorName.'"></div>'; echo '<div class="card-author-name">'.$creatorName.'</div>'; echo '</div>'; echo '</div>'; echo '</a>'; echo '</article>'; echo '</li>'; } echo '</ul>'; } } }

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

RSS内の記述が変わったのかもしれません。
アイキャッチ等を取り出している部分を以下のようにすると表示されました。
参考にしてください。

PHP

1// $eyecatch = json_decode($api_data, true)['data']['eyecatch']; 2$eyecatch = $item->data["child"]["http://search.yahoo.com/mrss/"]["thumbnail"][0]["data"]; 3 4// $creatorImg = json_decode($api_data, true)['data']['user']['user_profile_image_path']; 5$creatorImg = $item->data["child"]["https://note.com"]["creatorImage"][0]["data"]; 6 7// $creatorName = json_decode($api_data, true)['data']['user']['nickname']; 8$creatorName = $item->data["child"]["https://note.com"]["creatorName"][0]["data"];

こちらの記事が参考になるかと思います。
https://teratail.com/questions/253817
https://teratail.com/questions/255239

投稿2023/06/09 15:58

編集2023/06/17 13:12
fareastnoise

総合スコア250

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

risanyan

2023/06/10 03:47

こちらで問題が解消されました。 ありがとうございました!!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問