カスタムフィールドの値(数字)によって
記事のランキングを作成したいのですが、
うまくいかなくて困っています。
下記のように条件を指定し、記事を出力していますが、
順番がバラバラになってしまいます。
<?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…
というように規則性なく並び替えられてしまいます。
カスタムフィールドの値が大きい順に
記事を並び替えたいです。
ご教示いただけると幸いです。
よろしくお願い申し上げます。
【2019/2/23追記】
下記の点、確認してみました。
・すべてのプラグインを無効化
すべてのプラグインを無効化してみましたが、状況は変わりませんでした。
なお、テーマに追加している機能になるため、デフォルトテーマへは変更していません。
・キャッシュの無効化
サーバーのキャッシュ機能を無効化してみましたが、やはり変わりません。
・ログインしている場合とログインしていない場合
ログイン状態では特に変化しませんでした。
WordPressやサーバーの環境は以下の通りです。
[環境]
WordPress のバージョン:4.9.9
PHP:7.0.30
MySQL:5.5
サーバー:wpX
また、pre_get_posts等で投稿の並び替えを制御していないか確認してみました。
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') ); }
回答1件
あなたの回答
tips
プレビュー