質問: カスタムフィールドの値(数字)によって 記事のランキングを作成したいのですが、 うまくいかなくて困っています。 下記のように条件を指定し、記事を出力していますが、 順番がバラバラになってしまいます。 ``` 10, 'orderby' => 'meta_value_num', 'meta_key' => 'rank', 'order' => 'DESC' ) ); ?> ``` 順番は、カスタムフィールドの値が 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') ); } ```
回答: get_postsの条件に「'meta_type' => 'NUMERIC'」を追加することで数値で並び替えできるようになりました。お騒がせいたしました。 ``` 10, 'orderby' => 'meta_value_num', 'meta_type' => 'NUMERIC', 'meta_key' => 'rank', 'order' => 'DESC' ) ); ?> ```