single.php

WordPress APIを使ってランダムに記事を取得する

WordPressに投稿した過去記事をランダムに選んで表示したい場合の方法について紹介します。

WordPress REST API

今回は、WordPressに標準?で実装されているREST APIを使って記事の取得を行っていきます。セキュリティのプラグインなどを有効化していると、使えない場合もあるので注意してください。

例えば、次のようなURLをブラウザのアドレスに入力して、画面に文字が沢山表示されれば、REST APIが使えます。

https://sample.com/wp-json/wp/v2/posts

記事が多い場合にはフィルター

対象となる記事が多い場合には応答に時間がかかる場合があるので、あらかじめタグやカテゴリーで対象記事を絞り込んでおく方が無難です。

例えば、特定のタグで記事を抽出する場合には次のように行います。(タグの文字列で直接抽出することができないので、あらかじめタグのIDなどを取得しておく必要があります。

https://blog.janjan.net/wp-json/wp/v2/posts?tags=123

PHPでランダムに記事を抽出する方法

実際に、PHPでWordPressに投稿されている記事をランダムに抽出するには次のように行います。

対象となる記事を抽出します。$arrには、検索されたすべての記事の内容が入ってきます。

$url = "https://blog.janjan.net/wp-json/wp/v2/posts?tags=123";
$json = file_get_contents($url);
$arr = json_decode($json, true);

ヘッダー情報から、記事の総数を取得します。

$headerarr = get_headers($url, 1);
$articles = $headerarr["X-WP-Total"];

乱数を使って、記事総数内の数字を発生させます。(今回はmt_rand関数を使いました)

$min = 1;
$max = $articles;
$rnd = mt_rand ($min, $max);

先ほど同様に、ページ単位を1に固定して、対象ページにmt_rand関数で取得しておいた乱数を入力して、記事を取得します。

$url = "https://blog.janjan.net/wp-json/wp/v2/posts?tags=83&per_page=1&page=" . $rnd;
$json = file_get_contents($url);
$arr = json_decode($json, true);

これで、毎回処理が行われる度にランダムで異なる記事を抽出することができます。今までの処理をすべてコードにすると、こんな感じになります。

//対象となる全記事を取得
$url = "https://blog.janjan.net/wp-json/wp/v2/posts?tags=123";
$json = file_get_contents($url);
$arr = json_decode($json, true);        

//ヘッダーから総記事数を取得
$headerarr = get_headers($url, 1);
$articles = $headerarr["X-WP-Total"];

//関数を使って乱数を発生
$min = 1;
$max = $articles;
$rnd = mt_rand ($min, $max);

//乱数で再度記事を取得
$url = "https://blog.janjan.net/wp-json/wp/v2/posts?tags=123&per_page=1&page=" . $rnd;
$json = file_get_contents($url);
$arr = json_decode($json, true);

まとめ

別サイトに、WordPressの記事を掲載するような場合やTwitterなどのSNSに過去記事のリンクを投稿するような場合、ランダムで選びたい場合があります。

そのような場合は、乱数を発生させる関数と記事を取得するWordPressのAPIを組み合わせることで、簡単に処理を作ることができます。

WordPressの過去記事をランダムに抽出したい人の参考になれば幸いです。

スポンサーリンク

最後までご覧いただき、ありがとうございます。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です