サポート » 使い方全般 » ページングも出来る記事のランダム表示がわかりません

  • http://ja.forums.wordpress.org/topic/3635?replies=7
    上記kzさんの方法で全体のアーカイブをランダム表示でき、ページングしても同じ投稿が表示されない様にする事ができました。

    しかし、カテゴリー指定やカスタムフィールドで表示する場合にうまく表示できません。
    皆様のお知恵を貸して下さい。

    アーカイブの場合は下記で表示できています。
    functions.php
    function my_orderby_request($orderby){
    ini_set(‘date.timezone’,”Asia/Tokyo”);
    $date_str = date(‘Y-m-d H:i:00’);
    $time = strtotime($date_str);
    mt_srand($time);
    return ‘RAND(‘ . mt_rand(0,30) . ‘)’;
    }

    archive.php
    <?php
    $paged = get_query_var(‘paged’);
    $args = array(post_type => ‘post’,posts_per_page => ’10’,’paged’ => $paged);

    add_filter(‘posts_orderby_request’, ‘my_orderby_request’);
    query_posts($args);
    remove_filter(‘posts_orderby_request’, ‘my_orderby_request’);
    if(have_posts()) :
    while(have_posts()) :
    the_post();
    endwhile;
    else :
    /* no post */
    endif;
    ?>

    [管理者より: 「【重要】 お読みください」はフォーラム管理上のお知らせを掲載するカテゴリーですので質問のトピックには使用されないようお願いします。
    質問のトピックを作成される際には最もあてはまるカテゴリーを選択してください。
    本件は「使い方全般」カテゴリーに移動します。]

6件の返信を表示中 - 1 - 6件目 (全6件中)
  • モデレーター jim912

    (@jim912)

    カテゴリー指定やカスタムフィールドで表示する場合にうまく表示できません。

    どのテンプレートどのように記述し、どううまく表示されないのか具体的に問題点を記述してください。

    上記に書いてあるコードで記事全体をランダム表示することは出来、ページングしても同じ記事が表示されずにうまく動いています。
    functions.phpに書いているコードで1分間毎に乱数を出してランダムを変更しています。

    上記コードだと全体の記事からランダムしてしまいます、カテゴリーの項目をクリックした場合に選択カテゴリーのみからランダム表示を出来るようにしたいのです。

    カテゴリー項目だけを取得しランダムにする所がうまくできず、全体の記事が表示されてしまうので悩んでいます。

    モデレーター jim912

    (@jim912)

    記事の取得は、query_posts を使って行われています。この query_posts で記事の取得条件となっているのが

    $args = array(post_type => 'post',posts_per_page => '10','paged' => $paged);

    の部分ですので、ここにカテゴリーの条件を加えればカテゴリーでランダムな表示が実現できるかと思われます。

    なお、query_posts を利用される場合には、最後に(この場合は、endif;の後)に、wp_reset_query(); を記述されることをおすすめします。

    ありがとうございます。
    自分もご指摘の所でカテゴリーの指定やカスタムフィールドの指定をすればうまくいくと思いいろいろ試しているのですが思うような取得が出来ていません。

    カテゴリーでしたらthe_category();をうまく取り入れれば出来るように思うのですがどう記述したらいいのか悩んでいます。

    カスタムフィールドの場合は$taxonomy = $wp_query->get_queried_object();か<?php echo esc_html($taxonomy->name); ?>ここら辺で指定している感じるのですが$args = array(post_type => ‘post’,posts_per_page => ’10’,’paged’ => $paged);これに組み込む場合の記述がわからないかんじです。。。

    初心者ですみません

    モデレーター jim912

    (@jim912)

    カテゴリーとカスタム分類(タクソノミー)の場合は、

    $taxonomy = $wp_query->get_queried_object();

    でクエリーの条件を取得することができます。

    カスタムフィールドと仰っておられますが、カスタム分類の間違いでしょうか。
    通常では、カスタムフィールドでの表示というのは存在しません。

    指定の仕方は、query_postsのカテゴリー引数タクソノミー引数を参照してください。

    query_postsの引数の指定の仕方には、2種類あり、各指定を & で繋げる指定の仕方と、配列で指定するやり方があります。
    配列で指定する方法の方が指定可能な項目が多いので、この方法で学んでおいたほうが、後々悩まなくて済みます。

    今回のコードでは、

    $args = array(post_type => 'post',posts_per_page => '10','paged' => $paged);

    と、配列となっていますので、これにカテゴリー引数で利用出来る cat や category_name を加えてください。

    カテゴリーやカスタム分類の表示を archive.php で共用するには、

    $args = array(post_type => 'post',posts_per_page => '10','paged' => $paged);

    のあとに、is_category などで条件分岐を行った上で、

    $args['cat'] = 3;

    とすると、$args に後から配列の項目を追加することが可能です。

    上記ヒントを元にカスタム分類(タクソノミー)の指定方法を取り入れて下記のような記述をしたらうまくランダム表示でページングも大丈夫でした。

    $args = array(post_type => ‘post’,posts_per_page => ’10’,’paged’ => $paged,’tax_query’ => array( /* カスタム分類 */
    ‘relation’ => ‘OR’,
    array(
    ‘taxonomy’ => ‘area’,
    ‘field’ => ‘slug’,
    ‘terms’ => array( $taxonomy->name ),
    ),
    array(
    ‘taxonomy’ => ‘business_category’,
    ‘field’ => ‘slug’,
    ‘terms’ => array( $taxonomy->name ),
    ),
    array(
    ‘taxonomy’ => ‘job_category’,
    ‘field’ => ‘slug’,
    ‘terms’ => array( $taxonomy->name ),
    )
    )
    );

6件の返信を表示中 - 1 - 6件目 (全6件中)
  • トピック「ページングも出来る記事のランダム表示がわかりません」には新たに返信することはできません。