PHPで一度REST APIをサイト内に取り込み、静的ページのjsで取得することでクロスドメイン制限を回避。
log.php
$data = json_decode(file_get_contents('https://example.com/wp-json/wp/v2/posts?_embed'));
foreach ($data as $value) {
$title = $value->title->rendered;
$link = $value->link;
$year = substr($value->date, 0, 4);
$month = substr($value->date, 5, 2);
$day = substr($value->date, 8, 2);
$date = $year . '/' . $month . '/' . $day;
echo '<li><a href="' . $link . '" target="_blank">' . $date . ' ' . $title . '</a></li>';
}
javascript
function HTML_Load(_html, replace) {
var xmlhttp = new XMLHttpRequest();
xmlhttp.open("GET", _html, true);
xmlhttp.onreadystatechange = function () {
if (xmlhttp.readyState == 4 && xmlhttp.status == 200) {
var data = xmlhttp.responseText;
var elem = document.getElementById(replace);
console.log(elem);
elem.innerHTML = data;
return data;
}
}
xmlhttp.send(null);
}
HTML_Load('log.php', 'id-name'); //挿入したいid名
WordPressブログから静的サイトに記事を取得し、javascriptで表示する (REST API)
No Comment html,css,php,wordpressjavascript,REST API,Vanilla JS,wordpress静的サイト(example.com)にWordpressブログ(blog.example.com)から投稿記事を取得する備忘録。
例) 他Wordpressブログから、2020年の投稿記事を10件取得して2020年1月1日以降の記事を表示。
※クロスドメイン制約により、ドメインをまたいで取得することは出来ない。
(その場合はJSONPを使うなりPHP使うなりFeedから取り込むなり)
var root = document.getElementById("id-name");//読み込み先サイトのID
function getRequest(props) {
var xhr = new XMLHttpRequest();
xhr.open("GET", encodeURI(props.uri));
xhr.onload = function () {
if (xhr.status !== 200) {
console.log('Status error');
} else {
props.callback(JSON.parse(xhr.responseText));
}
};
xhr.send();
}
function forEach(props, callback) {
for (var i = 0, max = props.length; i < max; i++) {
callback(props[i], i)
}
}
getRequest({
uri: "https://blog.example.com/wp-json/wp/v2/posts?page=1&per_page=3&after=2020-01-01T00:00:00",
callback: function (posts) {
forEach(posts, function (post) {
var title = post.title.rendered;
var link = post.link;
var year = post.date.substr(0, 4);
var month = post.date.substr(5, 2);
var day = post.date.substr(8, 2);
var newElement = document.createElement("li");
newElement.innerHTML = '<a href="' + link + '" target="_blank"><span>' + Number(month) + '/' + Number(day) + '</span><span>' + title + '</span></a>';
root.appendChild(newElement);
})
}
});