kaine8639
フォーラムへの返信
-
フォーラム: 使い方全般
返信が含まれるトピック: 特定カテゴリー内の記事へのランダムリンク@ishitaka さま
ご丁寧にありがとうございます。仔細、承知いたしました。
fetch() 以後の流れがまだきちんと理解できているとは言い難いのですが、ここから先は自身で調べて学んでみようと思います。この度はご相談に乗っていただきありがとうございました。
精進いたします。フォーラム: 使い方全般
返信が含まれるトピック: 特定カテゴリー内の記事へのランダムリンク@ishitaka さま
実際のカテゴリIDをあらためて設定してみたところ、無事ランダムリンクが機能することを確認いたしました。長らく悩んでいたことが氷解し、本当に助かりました。ありがとうございます!
ただいまこちらやこちらのサイトを参考にしながら、教えていただいたコードのそれぞれの意味合いについて確認しているのですが、どういった処理が行われているのか、正直なところ把握しきれておりません。不躾なお願いで本当に恐縮なのですが、もし可能であれば、行われている処理についてアドバイスをいただけると大変うれしく思います。
現状私が理解しているのは、
function onLinkClick()
の中に、リンクをクリックしたときに起動するJavaScriptの処理が書かれており、var restUrl = document.querySelectorAll('link[rel="https://api.w.org/"]')[0].getAttribute('href'); fetch(restUrl + 'wp/v2/posts?orderby=rand&per_page=1&categories=' + cat) .then((response) => response.json()) .then((data) =>
fetch()内に取得したいURLを指定し、Responseの内容をthen()内で処理している、というところまでです(間違っていたら恐縮ですが…)。
フォーラム: 使い方全般
返信が含まれるトピック: 特定カテゴリー内の記事へのランダムリンク@ishitaka さま
さっそくのご返信、ありがとうございました。
いただきましたアドバイスをもとに現環境でテストしてみたのですが、JavaScriptがきちんと機能していないのか、動作を確認できませんでした。私の理解不足のようで申し訳ありません。私が適用した手順なのですが、まず固定ページ内に以下のJavaScriptを埋め込みました。Elementorを使用しているのですが、HTMLコードのブロックに入れ込んでいます。
<div> <script> function onLinkClick(cat) { var restUrl = document.querySelectorAll('link[rel="https://api.w.org/"]')[0].getAttribute('href'); fetch(restUrl + 'wp/v2/posts?orderby=rand&per_page=1&categories=' + cat) .then((response) => response.json()) .then((data) => { if (0 < data.length) { document.location.href = data[0].link; } }); } </script> </div>
続いて、都道府県のテキスト「東京」「神奈川」を
<a href="javascript:onLinkClick(13)">東京</a> <a href="javascript:onLinkClick(14)">神奈川</a>
として記入しました。
さらに、テーマのfunctions.php内に以下のコードを追記しました。
<?php function add_orderby_rand_rest_post_collection_params( $query_params ) { $query_params['orderby']['enum'][] = 'rand'; return $query_params; } add_filter( 'rest_post_collection_params', 'add_orderby_rand_rest_post_collection_params' ); ?>
REST APIについてまったく無知でしたので、こちらやこちらのサイトで概要を把握してから考えているのですが、どうにも良い解決策が思い浮かびません。
何度も申し訳ありませんが、アクションの問題点があるようであれば助言いただきたく思います。
何卒よろしくお願い申し上げます。