前提・実現したいこと
お世話になります。
html・CSSで作成したトップページに、wordpressの投稿記事を自動で表示させて、記事の投稿はお客様の方でしてもらうようにしたいと思っています。(部分的なCMSと言うのでしょうか…)
以前、別の仕事でwordpressのrssを取得して静的サイトのページに表示させるという方法で実装していたものがあったため、同じように作成したのですが、エラーが表示されてしまいます。
wordpressもphpもほとんど知識がなく、以前実装したものをコピペで実装しております。
(実装した担当者が退社してしまい聞く事ができません。コピペでできると言っていたのですが…)
1.本体のページ(index.html)は作成済み(新着記事部分を一旦htmlで作成してあります)
2.wordpress導入→子テーマを作成し投稿用のページとして準備(テンプレート:Brittany Light)
https://www.webcreatorbox.com/tech/wordpress-child-theme
↑こちらのサイトを参考に作成しました
3.index.htmlの該当箇所に以前実装したもののphpの記述をコピペし、変更が必要な箇所を書き換え→プレビューするとエラーメッセージが表示される
エラーが解消されて表示できるようでしたら、このまま使用したいとは思っていますが、あまり慣れていない者が実装するには難しいようでしたら、別の方法があれば教えていただきたいです。
間違いの箇所が表示されているのはなんとなくわかるのですが、それをどう修正したらよいのかがわからないため、ご教授いただければありがたいです。
不足の情報がございましたら、お知らせいただければと思います。
よろしくお願いします。
発生している問題・エラーメッセージ
Warning : simplexml_load_string(): Entity: line 2: parser error : Extra content at the end of the document in C:\xampp\htdocs\*****\www\index.php on line 88 Warning : simplexml_load_string(): <b>Warning</b>: require_once(/home/*****/www/wp/wp-content/themes/britt in C:\xampp\htdocs\*****\www\index.php on line 88 Warning : simplexml_load_string(): ^ in C:\xampp\htdocs\*****\www\index.php on line 88 Notice : Trying to get property 'channel' of non-object in C:\xampp\htdocs\*****\www\index.php on line 92 Notice : Trying to get property 'item' of non-object in C:\xampp\htdocs\*****\www\index.php on line 92 Warning : Invalid argument supplied for foreach() in C:\xampp\htdocs\*****\www\index.php on line 92
未公開のためローカルで作業しております。(XAMPP ver.3.2.2)
画像のグレー、エラーメッセージの*印部分はフォルダ名です
該当のソースコード
大元のhtmlです。
html
1<div id="news" class="bg_beige"> 2 <h2 class="u_line_green">お知らせ</h2> 3 <div class="news_fl"> 4<div class="newsbox"> 5 <div class="photo"></div> 6 <div class="day">2020.9.1</div> 7 <div class="title">テキストが入ります</div> 8 </div> 9 <div class="newsbox"> 10 <div class="photo"></div> 11 <div class="day">2020.9.1</div> 12 <div class="title">テキストが入ります</div> 13 </div> 14 <div class="newsbox"> 15 <div class="photo"></div> 16 <div class="day">2020.9.1</div> 17 <div class="title">テキストが入ります</div> 18 </div> 19 <div class="newsbox"> 20 <div class="photo"></div> 21 <div class="day">2020.9.1</div> 22 <div class="title">テキストが入ります</div> 23 </div> 24 </div> 25 </div>
php
1<?php 2$url = 'https://**********.or.jp/wp/feed/'; 3 4$ch = curl_init(); 5curl_setopt($ch, CURLOPT_URL, $url); 6curl_setopt($ch, CURLOPT_HEADER, false); 7curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); 8curl_setopt($ch, CURLOPT_TIMEOUT, 60); 9$xml = curl_exec($ch); 10curl_close($ch); 11 12$rss = simplexml_load_string($xml); 13 14$i=0; 15 16foreach($rss->channel->item as $item){ 17 if($i++ == 4){ 18 break; 19 } 20 21 if( preg_match_all('/<img(.+?)>/is', $item->description, $matches) ){ 22 foreach( $matches[0] as $img ){ 23 if( preg_match('/src=[\'"](.+?jpe?g)[\'"]/', $img, $m) ){ 24 $item->thumbnail = $m[1]; 25 } 26 } 27 } 28 29 $link = $item->link; 30 $title = $item->title; 31 $date = $item->pubDate; 32 $date = date('Y.m.d',strtotime($date)); 33 $desc = $item->children('http://purl.org/rss/1.0/modules/content/'); 34 35 echo '<div class="newsbox">'; 36 echo '<a href="'.$link.'"target="_blank">'; 37 echo '<div class=photo>'; 38 echo '<img src="'.$item->thumbnail.'" alt="'.$title.'">'; 39 echo '</div>'; 40 echo '<div class="day">'.$date.'</div>'; 41 echo '<div class="title">'; 42 echo $title; 43 echo '</div>'; 44 echo '</a>'; 45 echo '</div>'; 46 } 47 48$pdo = null; 49?>
上記htmlの<div class="news_fl">~</div>の中にphpをペースト。
$url = 'https://**********.or.jp/wp/feed/';をrssを取得したいwpのURLに変更。
全体のhtmlでは、phpの部分は77行目~125行目になっています。
エラーメッセージは88行目($rss = simplexml_load_string($xml);
)と92行目(foreach($rss->channel->item as $item){
)が間違えていると言っているのかと思うのですが…。
試したこと
エラーメッセージの意味を調べてみたのですが、どう解消すればよいのか意味がわかりません。
http://weble.org/2011/06/18/php-simplexml_load_string
https://teratail.com/questions/24841
https://ja.wordpress.org/support/topic/warning-invalid-argument-supplied-for-foreach/
また、$url = 'https://**********.or.jp/wp/feed/';のURLを実装済みのサイトのものに変更すると、そちらのフィードは取得できます。
以前実装したサイトとはWPのバージョンが違うため、それも関係あるのかと思いWPのバージョンのダウングレードもしてみましたが、変わりませんでした。
補足情報(FW/ツールのバージョンなど)
サーバは「さくらサーバ(スタンダード)」を使用し、
wordpress ver.5.4.2
php ver.7.4.7(モジュール版)
MySQL ver.5.7
使用ソフト
Brackets ver.1.14
html5・CSS3で作成
OS
Windows10 Home ver.1903
回答2件
あなたの回答
tips
プレビュー