Let's create! WordPressサイト制作とメンテ/エラー対応から、PHP/CSS/javascriptプログラミング、動画・音・イラスト等制作まで扱うコラム

【WordPress・WP_Query】おすすめ関連記事が、いつも同じものしか出ません→パラメーターorderbyに『rand』でランダム表示

更新: 2024/02/10 2652文字

今回は、管理人が自分で改造したテーマで発生したトラブル(?)について、対処した方法を紹介します。内容は『おすすめ関連記事が、いつも同じものしか出ない』。ランダムでいろいろ表示とかできないものでしょうか?

少しお仕事でデータベースのSQLクエリをやったことがあり、並べ替えなどがあったと思うので、WPにもあるはず、ということで検討してみます。

トラブルというか、気になったポイント→おすすめ関連記事が、いつも同じものしか出ない

しばらくこの機能は放置したので忘れていました(笑)このサイト・読んどけコラムでは、カテゴリー内の関連記事を取得するようになっていました。しかし、『毎回毎回、同じ記事しか出ていない』というのが気になっていました。新しい順番になっていますが、これはデフォルト並びでしょうか。

新記事を追加した場合は、それが一番上に来るようにはなっています。これだと、『過去記事のインプレッション数(表示の回数)』が減ってしまいます。古い順でも良いですが、それでは新着の表示も減ります。『ランダム表示』みたいなのができないものでしょうか。

原因は、WP_Queryに渡す順序のパラメーター『order』

で、新しい順にしか出ない原因については、関連記事表示部分のプログラムを調べてサックリ解決。関連記事の取得部分です。ここで『WP_Queryクラス』に渡すパラメーターorderが『desc』になっていました。これだと降順(新しいほうから降りてくる)になり、デフォルト状態は、この並びになっています。

パラメーター『order』には、他に『asc』を指定することができ、このときは『古いほうから順番に並べる』ことができます。このように昔の記事から順番に出てきます。

対応:パラメーター『orderby』を追加し、『rand』指定するとランダム表示可能

WP_Queryクラスへの渡し方

そこで、WP_Queryクラスに渡すパラメーター『orderby』を追加します。『order』とは別です。このような感じで、渡す変数(ここでは$args)内に記載し、『rand』を指定

WP_Queryクラスに渡すパラメーター『orderby』に指定できる値は、他にも以下のようなものがあります(よく使いそうなもの、指定できるものはもっとたくさんある)。

  • 『ID(投稿id順番)』
  • 『name(スラッグ順)』
  • 『comment_count(コメント数)』
  • 『modified(更新日)』
  • 『meta_value(カスタムフィールド・meta_key=keynameの指定や、文字列型/数値型の考慮も必須)』

表示例:読み込みごとに、ランダムで違う記事が関連に出るようになる

orderbyにrandを指定した例です。まずページをリロードすると、別の記事が出てきます。

もう一回リロードで、また別の記事が表示。『固定で〇〇を見せたい』などのときはidの指定で、いろいろ見てもらいたい(ただし関連するカテゴリ)ときは、rand指定が良いかなと思います。

注意ポイント:MySQLデータベースのORDER BY 句は、DESC/ASC指定ができる点が、WPと異なる

で、注意点です。WordPressでは『orderでDESC/ASCを指定』『orderbyでidやランダム・フィールドなどを指定』という形でした。MySQLデータベースで使うクエリにも似たようなクエリがありますが、混同に気をつけたいところです。

『ORDER BY句』です。MySQLデータベースでは、以下のようにORDER BY句でDESC/ASC(ソート方法)指定します(ORDER BYはキーに対してDESC/ASCも)。

『SELECT * FROM ◇◇(テーブル) ORDER BY 〇〇(カラム) DESC(ソート方法)』

昔(サイト立ち上げ当初)、管理人は混同していたんですけど、データベースとか、WPでもSQLでとる、みたいなお仕事時に調査して、気づくことができました。いやーお恥ずかしい(笑)

おまけ:WP_Queryクラスなどを使った、WordPressカスタマイズ

今回の例のほかにも、当サイトではWP_Queryクラスなどを使ったカスタマイズ事例を紹介しています。興味がありましたら、こちらの記事もご確認ください。

あとがき・まとめ

  • WPおすすめ関連記事が、パラメーターがデフォルトだと、順番が固定される
  • パラメーターorderbyに『rand』だと、ランダム表示が可能
  • WP_Queryパラメーターorderbyと、MySQLデータベースのORDER BY句は異なるので、混同に注意

まとめると、このような形でしょうか。WP_Queryに渡すパラメーターには、いろいろなものがあるので、サイトの状況に合わせてチョイスしていただければと思います。


【カテゴリ】- WordPressファンクションetc
【タグ】- ,

関連記事