サポート » 使い方全般 » 投稿のランダム表示と投稿が重複しない次ページの表示

  • 解決済 akkii

    (@akkii)


    お世話になります。
    現在オリジナルのテンプレートを作成しており、その中で

    ・投稿の一覧をランダムで任意の数を出力
    ・任意の数を超える場合はプラグインの「WP-PageNavi」でページナビゲーションを出力
    ・ページをまたいでも重複はしない(例:2ページ目に1ページ目の投稿は出力されない)
    上記の内容を実装したいと考えております。

    下記のフォーラムにほぼ同様の内容がありましたので試してみたところ、
    データの出力自体はされたのですが、ランダムで表示されず、ページナビゲーションも出力されませんでした。
    http://ja.forums.wordpress.org/topic/3635?replies=7

    お手数ではございますが、ご教授頂ければと存じます。
    また、情報として不足しているものがございましたらご指摘頂ければと存じます。
    以上宜しくお願い致します。

4件の返信を表示中 - 1 - 4件目 (全4件中)
  • 同じようなことをやろうとしている方がいらっしゃいました。

    WP-PageNaviで、ページングはできるが同じ記事が重複して表示される

    akkii さんは、どんなページで行っていますか? 固定ページですか、それともトップページやアーカイブなどのページですか? 固定ページでなければ、テンプレートに書かなくても、pre_get_posts フックでできると思うのですが。どこに、どんなコードを書いたかがわかると、コメントがつけやすいかもしれません。

    kjmtsh様
    ご指摘ありがとうございます。
    カテゴリーページにて表題の動作をと考えております。

    現状では、カテゴリー用のテンプレートファイルとfunctions.phpに、
    以下のフォーラムでkz様がお答えしている通りの内容を記載しています。
    http://ja.forums.wordpress.org/topic/3635?replies=7

    そのままちゃんと記述してあれば、ページングはともかく、一応ランダムな並びにはなると思うのですが、そうならないということは、フィルタがうまくフックしていない可能性が高いです。それ以上はコードを見なければ何も言えません。

    「アーカイブ」ページということなので、pre_get_postsフックを使った別解です。元記事の、セッションを使ったものは、mt_rand()の性能が良すぎて、毎回ランダムになってしまうので、セッションIDから数字だけ抜き出して MySQL の RAND() 関数に渡すようにしてあります。

    条件の部分は、お望みのページが表示されるときの条件を書いてください。$query->is_category() でいいかもしれません。

    function another_orderby_request($orderby) {
        if (session_id() == '') session_start();
        $session_number = preg_replace('/[^\d]/', '', session_id());
        return 'RAND(' . intval($session_number) . ')';
    }
    add_action('pre_get_posts', 'random_display');
    function random_display($query) {
        if (is_admin() || !$query->is_main_query()) return;
        if (条件) {
            $query->set('posts_per_page', 3);
            add_filter('posts_orderby_request', 'another_orderby_request');
        }
    }

    なお、WP PageNavi は、固定ページでないところで迂闊に query_posts() みたいな関数を使うと、ページングの参照を間違うことが多いので、上のフックでメインクエリを書き換えるのがお勧めです。

    kjmtsh様

    ご回答頂きありがとうございます。
    希望通りの動作をすることを確認いたしました。
    ご親切にありがとうございました。

    こちらは解決済みとさせて頂きます。

4件の返信を表示中 - 1 - 4件目 (全4件中)
  • トピック「投稿のランダム表示と投稿が重複しない次ページの表示」には新たに返信することはできません。