サポート » 使い方全般 » wordpressのランダム表示の優先度指定

  • 初めまして。
    以下の状況で現在悩んでおります。
    どうかお力を貸して頂けませんでしょうか?

    現在ランダム表示にしているのですがそのランダム表示の優先度を出したいと思います。

    【カテゴリ1】というカテゴリを先にランダムで吐き出してから

    【カテゴリ2】というカテゴリをランダムで表示したいと思っています。

    基本的にページ内には5件表示したいのです。

    しかし、その優先順位の決め方がわからずに困っています。

    カテゴリ1には2件記事があり、カテゴリ2には30件記事があります。

    <?php
    $paged = get_query_var('paged') ? get_query_var('paged') : 1;
    query_posts('category_name=pu & posts_per_page=2 &orderby=rand & paged=' . $paged); ?>
    <?php if(have_posts()):while(have_posts()):the_post(); ?>
    <a href='<?php the_permalink() ?>'><?php the_title(); ?></a>
    <?php endwhile; ?>
    <?php endif; ?>
    
    <?php
    $paged = get_query_var('paged') ? get_query_var('paged') : 1;
    query_posts('category_name=カテゴリ2 & posts_per_page=3 &orderby=rand & paged=' . $paged); ?>
    <?php if(have_posts()):while(have_posts()):the_post(); ?>
    <a href='<?php the_permalink() ?>'><?php the_title(); ?></a>
    <?php endwhile; ?>
    <?php endif; ?>

    という風に分けて記述していますが、これでやるとページ送りをした際に上のカテゴリ1という表示が吐き出された後は表示件数が3件になってしまいます。
    ちなみにwp-pagenaviを使ったページ送りをしています。

    これがランダムの中でもカテゴリの優先順位を決めて一つのソースで吐き出されるようになれば解決するかなと思うのですが,

    何分phpは初心者なものでどうかお力を貸して頂けたらと思います。

6件の返信を表示中 - 1 - 6件目 (全6件中)
  • こんにちは。
    ランダム表示なのにページ送りがあるのですか?
    有効なナビゲーションでない気がしますが…。

    もしページ送りが必要ないのであれば、paged=1 としてみてください。
    もし必要な場合(例えば、これらとは別にメイン記事のWordPressループがある場合)は
    wp_reset_query() で元のクエリに戻してみてはいかがでしょうか?

    すみません、勘違いでした…。
    2ページ以降3件しか表示されないのは、カテゴリー1の記事が2件しかないからですね。

    ですので、カテゴリー1の記事が常に表示されて欲しい場合は、カテゴリー1の記事のみ paged=1 とすればいいと思います。または have_posts() で記事がなかった場合に paged=1 に変更したパラメータで再度 query_posts() する条件分岐もできそうですね。

    トピック投稿者 kxkkxk

    (@kxkkxk)

    mizube 様
    アドバイスありがとうございます。
    ご指摘いただいてアドバイスで試行錯誤中なのですが上手く進めていません。
    ソース内でクエリポストを途中で変える方法が理解できていません。

    have_posts() で記事がなかった場合の条件分岐で進めて行くとこのような感じになるのでしょうか?

    <?php
    $paged = get_query_var('paged') ? get_query_var('paged') : 1;
    query_posts('category_name=pu & posts_per_page=2 & paged=' . $paged); ?>
    <?php if(have_posts()):while(have_posts()):the_post(); ?>
    
    <a href='<?php the_permalink() ?>'><?php the_title(); ?></a>
    
    <?php endwhile; else: ?>
    
    <?php
    $paged = get_query_var('paged') ? get_query_var('paged') : 1;
    query_posts('category_name=カテゴリ2 & posts_per_page=5 &orderby=rand & paged=' . $paged); ?>
    
    <a href='<?php the_permalink() ?>'><?php the_title(); ?></a>
    
    <?php endif; ?>
    トピック投稿者 kxkkxk

    (@kxkkxk)

    kxkkxkさん、長い間返信できなくて申し訳ありませんでした。
    もしカテゴリー1よりカテゴリー2の方が記事数が多く、
    カテゴリー2だけ表示される場合があっても構わない場合はシンプルですね。
    こんな感じでどうでしょうか?

    <?php
    $query1 = array('posts_per_page' => 2); // クエリ1
    $query2 = array('posts_per_page' => 5); // クエリ2
    query_posts( $query1 );
    if ( have_posts() ) {
        $count = 0;
        while ( have_posts() ) {
            the_post();
            // loop 1
           $count++;
        }
        $query2['posts_per_page'] -= $count;
    }
    query_posts($query2);
    if ( have_posts() ) {
        while ( have_posts() ) {
            the_post();
            // loop 2
        }
    }
    wp_reset_query();
    ?>

    カテゴリー1を常に2件ピックアップしたいという場合にはまた変わります。

    トピック投稿者 kxkkxk

    (@kxkkxk)

    mizube様
    ご返信ありがとうございます。本当にありがとうございます。

    現在試しているのですが、どういう記述になるのかいまいちわからず…

    <?php
    $query1 = array('posts_per_page' => 2); // クエリ1
    $query2 = array('posts_per_page' => 5); // クエリ2
    query_posts( $query1 );
    if ( have_posts() ) {
        $count = 0;
        while ( have_posts() ) {
            the_post();
            // loop 1
           $count++;
        }
        $query2['posts_per_page'] -= $count;
    }
    query_posts($query2);
    if ( have_posts() ) {
        while ( have_posts() ) {
            the_post();
            // loop 2
        }
    }
    wp_reset_query();
    ?>
    <?php if(have_posts()):while(have_posts()):the_post(); ?>
    
    <a href='<?php the_permalink() ?>'><?php the_title(); ?></a>
    
    <?php endwhile; ?>
    <?php endif; ?>

    となるのでしょうか?

6件の返信を表示中 - 1 - 6件目 (全6件中)
  • トピック「wordpressのランダム表示の優先度指定」には新たに返信することはできません。