サポート » 使い方全般 » 記事のランダム表示について

  • 解決済 shicamo

    (@shicamo)


    VPS CentOS nginxでwordpressを使っています。

    自作テーマにて、
    footer.phpにWEBで拝借した「過去の投稿をランダムに表示するコード」を使い、
    15件の過去記事を表示しています。

    しかしnginxのキャッシュの影響でランダム記事が静的なものになってしまっていて、
    ページを更新してもその場で内容が変わりません。

    そこで、動的に動かす為にプラグインで良いものが無いかと探してみましたが、ウィジェットを使用したくないのもあり、なかなか見つかりません。

    テーマに記述しているこのコードを自分でプラグイン化できればいいのかもしれませんが、
    そういった技術もなく困っております。

    何方か設置場所に囚われないランダム記事表示プラグイン、若しくは別の名案をご存知の方はいらっしゃらないでしょうか。

    ランダム記事表示のコードは以下になります。

    <?php
    $loop = new WP_Query( array('posts_per_page' => 15, 'orderby' =>rand ) );
    while ( $loop->have_posts() ) : $loop->the_post();
    ?>
    <ul>
        <li><a href="<?php the_permalink(); ?>"><?php the_title(); ?></a></li>
    </ul>
    <?php endwhile;wp_reset_query(); ?>

    非常に分かり辛い内容になってしまいましたが宜しくお願い致します。

6件の返信を表示中 - 1 - 6件目 (全6件中)
  • <?php $wpdb->flush(); ?>
    を初めに置けば結果のキャッシュをクリア出来そうな気がします(未検証)

    トピック投稿者 shicamo

    (@shicamo)

    CyberCypher 様

    貴重なアドバイスありがとうございました。
    <?php $wpdb->flush(); ?>
    を設置して試行してみましたが(複数個所)上手く更新ができませんでした。

    その後も素人なりに調べてみましたが、
    やはりサーバー側でキャッシュの設定をしてしまっている為、
    javascriptのような外部的なものでないと動的に動かすのは難しそうです。

    実際にAjaxを使ったプラグインでも静的になってしまいました。
    ただ、Random Post Boxというプラグインは見た目フラッシュ的な感じで常に動くものでしたので、これを上手くカスタマイズできれば複数件のランダム記事を表示できるのかもしれません。

    或いはgoogle feed APIなどを使用して自分の投稿を取得してランダム表示するくらいしか浮かびません。。重いので使いたくはないのですが;;

    nginx自体の話はする場所が違うと怒られるかもしれませんが、
    footer.phpをキャッシュしない設定にしたとしても、実際のアクセスはindex.php、single.php等を呼び出し、その中でfooter.phpをincludeしているので、意味が無いそうです。

    キャッシュをやめてしまうとnginxを使う意味が無くなりますし、
    定期更新で我慢するのも少し未練が残ります。

    上記のものを含めもうちょっと調べていじってみたいと思いますが、
    他の手段を若しご存知であれば是非ご教授頂きたいです。

    またCyberCypher様のお陰で$wpdbというものを知る機会を得ました。
    私にはかなり難しい領域ですがもっと勉強したいと思います。

    ランダムのシードってどうなってんだろ・・・
    SQLでRAND(num)が使えるみたいな記事があったのでとりあえずコチラ
    シードを時間とかから持ってくればアクセスする度に変わらないかなぁ?

    トピック投稿者 shicamo

    (@shicamo)

    CyberCypher 様

    むおー、全くわからない領域のようです><
    でもありがとうございます。
    じっくり学ばせて頂きます。

    今はとりあえず前述のRandom Post Boxのソースを編集し、ランダム記事を表示させておりますが、気が付くとエラーを起こしていて-1とだけ表示されているのが玉に瑕です。

    色々な事を知って覚えるたび奥が深くなっていきます・・・。

    シード(種)と言うのはランダムの元になる数値のこと
    ランダムは一定の規則に従って数値をバラバラにすることで別の数値に置き換える事です
    実際に計算する必要はないので仕組みは書いておきますが下記は無視して大丈夫です

    そして秒数でシードを与えてやれば毎回数値は変わっていくので
    簡単に乱数(ランダムした数値のこと)を取得する事が出来ます

    シードの仕組みを説明したところで本題に戻りますが
    乱数と言うのはシードが同じであれば前と同じ値が取れてしまいます
    詳しくは後述で省きますが、シードが変わらないのであれば自分から変えてやれば?と言うのが前の回答になります

    リンク先は乱数を取得して記事を取得する命令文の一部を置き換えてる回答があります
    少し難しいかと思いますのであくまで参考程度になればと思います

    補足:ランダムの仕組みとシードについて

    分かりやすく説明する為に1000という初期値があると仮定します
    そこへシードを与えてやります、ここでは5としてみます
    1000+5=1005 → 1005*1005=1010025
    1010025の真ん中だけ使用します
    1 01002 5= 01002 = 1002
    一桁にしたいので一桁になるまで数値を足す
    1+0+0+2=3

    こんな風に5と言う数字が3になりました
    この5と言う値が6だったり7だったりすることで
    出てくる値は不規則に出てくると思います
    この渡してやる値が乱数のシードと言います
    ちなみに以上は平方採中法と言う方法の乱数です

    トピック投稿者 shicamo

    (@shicamo)

    とてもわかりやすいご説明ありがとうございます!!
    すっと仕組みが理解できました!

    足りない基礎知識を埋めながら、
    先のリンクと合わせてコードに応用できるだけの勉強を頑張ってみます^^

    時間は掛かるかもしれませんが作れたらご報告差し上げたいと思います。

    CyberCypherさんが本を書いてくれたらものすごくわかりやすいものになるんじゃないだろうか・・・。

    長々と引っ張ってしまってすみません。
    一度解決とさせて頂きます。

    また初歩的なことを質問してしまうと思いますがどうぞ宜しくお願い致します。

6件の返信を表示中 - 1 - 6件目 (全6件中)
  • トピック「記事のランダム表示について」には新たに返信することはできません。