サポート » 使い方全般 » カスタムフィールドの値(数字)で記事一覧を並び替えたい

  • 解決済 dadadada

    (@uedajirou2015)


    カスタムフィールドの値(数字)によって
    記事のランキングを作成したいのですが、
    うまくいかなくて困っています。

    下記のように条件を指定し、記事を出力していますが、
    順番がバラバラになってしまいます。

    <?php 
    $ranking = get_posts( array(
        'numberposts' => 10,
        'orderby' => 'meta_value_num',
        'meta_key' => 'rank',
        'order' => 'DESC'
    ) );
    ?>
    <ol>
    <?php foreach ($ranking as $post) : setup_postdata($post); ?>
    <li>
        <a href="<?php the_permalink(); ?>">
            <p><?php the_title(); ?></p>
        </a>
    </li>
    <?php endforeach; ?>
    </ol>

    順番は、カスタムフィールドの値が
    4→1→1→3→0→0→2…
    というように規則性なく並び替えられてしまいます。

    投稿ID順でもなく、タイトル順でもありません。
    しかもしばらくすると順番が変わってしまいます。

    カスタムフィールドの値が大きい順に
    記事を並び替えたいです。

    ご教示いただけると幸いです。
    よろしくお願い申し上げます。

7件の返信を表示中 - 1 - 7件目 (全7件中)
  • こんにちは

    テーマまたはプラグインによって、pre_get_posts などのフィルターフックでクエリが変更されているのではないでしょうか?
    下記トピックのトラブルシューティングを試してみてください。
    https://ja.wordpress.org/support/topic/問題解決のためのチェックリスト-ドラフト版/

    dadadada

    (@uedajirou2015)

    ishitaka様
    ご返信ありがとうございます。
    下記の点、確認してみました。

    ・すべてのプラグインを無効化
    すべてのプラグインを無効化してみましたが、状況は変わりませんでした。
    なお、テーマに追加している機能になるため、デフォルトテーマへは変更していません。

    ・キャッシュの無効化
    サーバーのキャッシュ機能を無効化してみましたが、やはり変わりません。

    ・ログインしている場合とログインしていない場合
    ログイン状態では特に変化しませんでした。

    WordPressやサーバーの環境は以下の通りです。

    [環境]
    WordPress のバージョン:4.9.9
    PHP:7.0.30
    MySQL:5.5
    サーバー:wpX

    pre_get_postsも探してみましたが、
    該当の箇所に影響する記述は見当たりませんでした。

    以上、よろしくお願いいたします。

    そうなると、あとはテーマに問題があると思うのですが・・・
    テーマは何をお使いですか?

    pre_get_postsも探してみましたが、該当の箇所に影響する記述は見当たりませんでした。

    クエリを変更するフックは、他にもいろいろ(posts_orderby など)あるので「order」などの文字列を探してみてください。

    dadadada

    (@uedajirou2015)

    ご返信ありがとうございます。

    テーマは、SURFING by OMCというのを使っております。
    https://themesinfo.com/surfing-best-wordpress-theme-eh8

    また、テーマファイルすべての中から”order”を検索してみました。
    pre_get_postsで月別アーカイブやカテゴリーページの並びを変えている箇所は
    ありましたが、今回のランキングには影響しないと思われます。

    if ( $query->is_month() ) {
      $query->set( 'meta_key', 'eventday' );
      $query -> set('orderby', array('meta_value' => 'ASC', 'date' => 'ASC') );
    }
    
    if ( $query->is_tag() || $query->is_category() ) {
      $query->set( 'meta_key', 'eventday' );
      $query -> set('orderby', array('meta_value' => 'DESC', 'date' => 'DESC') );
    }

    以上、よろしくお願いいたします。

    商用テーマでしょうか?商用プロダクトに関しては、このフォーラムでサポートすることができません。
    https://wpdocs.osdn.jp/フォーラムへようこそ#.E5.95.86.E7.94.A8.E3.83.97.E3.83.AD.E3.83.80.E3.82.AF.E3.83.88

    提供元にお問い合わせください。お役に立てずにすみません。m(__)m

    dadadada

    (@uedajirou2015)

    ご返信ありがとうございます。
    そうだったのですね。
    ルールを知らず、お手間を取らせてしまい申し訳ありませんでした。

    ルールを知らず、お手間を取らせてしまい申し訳ありませんでした。

    今回は、問題を絞り込むことでテーマに問題がある可能性が高くなったためなので問題ないと思います。
    テーマをデフォルトに切り替えることで、サポートは可能だと思います。

7件の返信を表示中 - 1 - 7件目 (全7件中)
  • トピック「カスタムフィールドの値(数字)で記事一覧を並び替えたい」には新たに返信することはできません。