サポート » 使い方全般 » カテゴリ内の記事一覧の順番を変えたい

  • 解決済 ftakenaka

    (@ftakenaka)


    こんにちは、記事一覧について下記のことが解決できず困っておりますので、お助け頂ければ幸いです。

    ●やりたいこと
    各カテゴリページを開いた時、そのカテゴリに属する記事が新着順で表示されていますが、これを50音順にしたいと思っています。
    ※記事のタイトルは全て カタカナ で登録してあります。

    ●現在のコード
    順番を指定したいため「category.php」に query_posts を入れ下記コードにしました。しかし、 query_posts を入れるとカテゴリに関係なく全記事が表示されてしまいます。

    <ul>
        <?php query_posts("&orderby=title&order=ASC"); ?>
        <?php while (have_posts()) : the_post(); ?>
    	<li><a href="<?php the_permalink() ?>" rel="bookmark"><?php the_title(); ?></a></li>
    <?php endwhile; ?>
    </ul>

    そのカテゴリに属する記事一覧の表示順を指定するにはどのようにすれば宜しいでしょうか?
    どうぞよろしくお願いいたします。

4件の返信を表示中 - 1 - 4件目 (全4件中)
  • query_postsを使ってしまうと表示する記事をゼロから設定することになります。
    カテゴリ一覧ページはすでに「あるカテゴリの一覧を表示させる」というフィルターがかかっていますから、このフィルタを引き継いだまま順序を変える必要があります。

    そういった場合にはpre_get_postsというのを使うと行けます。
    以前の質問にある参考リンクが有益です。
    https://ja.forums.wordpress.org/topic/23237?replies=6

    ちょっとわかりにくいですが試してみてください〜。

    トピック投稿者 ftakenaka

    (@ftakenaka)

    hogetanさんご返答ありがとうございました!

    pre_get_posts を使えば良いということ理解いたしました。
    functions.phpに下記コードを入れてみたのですが、新着順にしか表示されず、どのようにして良いのか分からなくなってしまいました。

    //カテゴリの一覧を50音順に
    add_action( 'pre_get_posts', 'custom_query_pre_get_posts' );
    function custom_query_pre_get_posts( $query ) {
        if ( !is_admin() && $query->is_main_query() ) {
            if ( is_category('dictionary') ) {
                $orderby = $query->get( 'orderby' );
                if ( empty($orderby) ) {
                    $query->set( 'orderby', 'title' );
                }
                $order = $query->get( 'order' );
                if ( empty($order) ) {
                    $query->set( 'order', 'ASC' );
                }
            }
        }
    }

    ※参考サイト:http://morilog.com/wordpress/tips/custom_parse_query/

    どこを直せば良いのか、お力をお貸し頂ければ幸いです。
    お手数ですが、どうぞ宜しくお願いいたします。

    pre_get_postsはなかなか分かりにくいのですが、早速コードを書かれたようで良いですね。

    ここから先はデバッグを含めていくことになるかと思います。
    まずは

    if ( !is_admin() && $query->is_main_query() ) {
            if ( is_category('dictionary') ) {

    この部分がうまく通っているか確認してみましょう。

    //カテゴリの一覧を50音順に
    add_action( 'pre_get_posts', 'custom_query_pre_get_posts' );
    function custom_query_pre_get_posts( $query ) {
                    $query->set( 'orderby', 'title' );
    }

    とした場合に該当のページ、その他のページ全てがタイトル順になるか調べてみてください。
    これでうまくいけば is_category('dictionary')、それから $query->is_main_query() を疑っていきましょう。

    この辺りはケースバイケースなのでちょっと大変ですね 🙂

    トピック投稿者 ftakenaka

    (@ftakenaka)

    hogetanさん、ご返答ありがとうございます。

    is_category(‘dictionary’)から「dictionary」を削除したら、
    無事にタイトル順に表示されました。

    お助け頂き本当にありがとうございました!

4件の返信を表示中 - 1 - 4件目 (全4件中)
  • トピック「カテゴリ内の記事一覧の順番を変えたい」には新たに返信することはできません。