サポート » 使い方全般 » 投稿記事の一覧から、特定の記事を除外してランダム表示させたい。

  • 解決済 tsuyama yusuke

    (@tsuyama-yusuke)


    WordPressのトップページで投稿記事一覧を表示しています。
    新着記事として6件を表示して、その下に新着記事を含まない過去の投稿記事の3件をランダムに表示させたいのですが、その場合どのようなコードを用いれば良いのでしょうか?

    全くの初心者の為、説明がうまく出来ず申し訳ありません。

    今のコードがこちらです。
    <?php
    query_posts(array(‘post_type’ => ‘post’, ‘posts_per_page’ => 6));
    while (have_posts()) :
    the_post();
    get_template_part(‘content-top-info’);
    endwhile;
    wp_reset_query();
    ?>

    <?php
    query_posts(array(‘post_type’ => ‘post’, ‘offset’ => ‘6’ , ‘posts_per_page’ => ‘3’ , ‘orderby’ => ‘rand’));
    while (have_posts()) :
    the_post();
    get_template_part(‘content-top-info’);
    endwhile;
    wp_reset_query();
    ?>

7件の返信を表示中 - 1 - 7件目 (全7件中)
  • offset=nnnorderby=rand を一緒に指定すると、先にランダムに並び替えられて、後から先頭nnn個が読み飛ばされるみたいですね。ですので、これでどうでしょうか。

    <?php
    global $post;
    $myposts = get_posts( 'posts_per_page=6' );
    foreach( $myposts as $post ) {
    	setup_postdata( $post );
    ?>
    	<h1><?php the_title(); ?></h1>
    	<div><?php the_content(); ?></div>
    <?php
    }
    wp_reset_postdata();
    ?>
    
    <?php
    global $post;
    $myposts = get_posts( 'offset=6&posts_per_page=3' );
    shuffle( $myposts );	// ここでランダム順にする
    foreach( $myposts as $post ) {
    	setup_postdata( $post );
    ?>
    	<h1><?php the_title(); ?></h1>
    	<div><?php the_content(); ?></div>
    <?php
    }
    wp_reset_postdata();
    ?>

    トピック投稿者 tsuyama yusuke

    (@tsuyama-yusuke)

    ghvstさん返信ありがとうございます。
    参考にさせて頂き、コードを書き換えました。
    下の最新の6つを除いた3つをランダムに表示する部分です。
    試してみたところ、3つの投稿記事の表示のみがシャフルされています。
    説明下手で申し訳ありません。

    <?php
    global $post;
    $myposts = get_posts( ‘posts_per_page=6’ );
    foreach( $myposts as $post ) {
    setup_postdata( $post );
    get_template_part(‘content-top-info’);
    ?>

    <?php
    }
    wp_reset_postdata();
    ?>

    <?php
    global $post;
    $myposts = get_posts( ‘offset=6&posts_per_page=3’ );
    shuffle( $myposts ); // ここでランダム順にする
    foreach( $myposts as $post ) {
    setup_postdata( $post );
    get_template_part(‘content-top-info’);
    ?>

    <?php
    }
    wp_reset_postdata();
    ?>

    モデレーター gatespace

    (@gatespace)

    posts_per_page=3 で3個取得してその中でランダムに並び替えしてるからじゃ?

    そうじゃなくて、
    – 投稿全体から最新の6件マイナスして
    – 残った投稿からランダムで3件抽出
    ということ?

    ちょっと検証してないのですが、
    offsetじゃなくて、 post__not_in つかって orderby=rand と posts_per_page 指定するとどうなりますかね?

    除外する投稿IDを取らないといけないので、こんな感じでしょうかね?

    $myposts = get_posts('posts_per_page=6');
    $posts_to_exclude = array();
    foreach( $myposts as $post ) {
        setup_postdata( $post );
        get_template_part('content-top-info');
        array_push($posts_to_exclude, $post->ID);
    }
    $args = array(
        'posts_per_page' => 3,
        'orderby'        => 'rand',
        'post__not_in'   => $posts_to_exclude
    );
    $myposts = get_posts($args);
    foreach( $myposts as $post ) {
        setup_postdata( $post );
        get_template_part('content-top-info');
    }
    wp_reset_postdata();

    gatespaceさん、kjmtshさん、ご指摘ありがとうございます。「新着記事を含まない過去の投稿記事の3件をランダムに表示させたい」のですから、確かに「最初の6つを除いた残り全部をシャッフル」ですよね。そそっかしくて申し訳ありません。

    トピック投稿者 tsuyama yusuke

    (@tsuyama-yusuke)

    gatespaceさん、kjmtshさん、ghvstさんありがとうございました!
    なんとか出来ました。助かりました。

    トピック投稿者 tsuyama yusuke

    (@tsuyama-yusuke)

    勉強になりました。

7件の返信を表示中 - 1 - 7件目 (全7件中)
  • トピック「投稿記事の一覧から、特定の記事を除外してランダム表示させたい。」には新たに返信することはできません。