質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
WordPress

WordPressは、PHPで開発されているオープンソースのブログソフトウェアです。データベース管理システムにはMySQLを用いています。フリーのブログソフトウェアの中では最も人気が高く、PHPとHTMLを使って簡単にテンプレートをカスタマイズすることができます。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

Q&A

解決済

1回答

1381閲覧

【WordPress】カスタムフィールドの値(数字)で記事を並び替えたい

tetutetutetu

総合スコア46

WordPress

WordPressは、PHPで開発されているオープンソースのブログソフトウェアです。データベース管理システムにはMySQLを用いています。フリーのブログソフトウェアの中では最も人気が高く、PHPとHTMLを使って簡単にテンプレートをカスタマイズすることができます。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

0グッド

0クリップ

投稿2019/02/19 05:24

編集2019/02/23 12:23

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

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

<?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') ); }

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

CHERRY

2019/02/19 06:38

表示させるループ部分は、どのように表示させていますか? また、現在どのような順で並んでいるかわからないでしょうか? id 順、日付順 etc...
tetutetutetu

2019/02/20 12:15 編集

コメントありがとうございます。 ループ部分のコードも追加いたしました。 また、順番はカスタムフィールドの値が 4→1→1→3→0→0→2…というように めちゃくちゃな順番になっています。 投稿ID順・日付順でもないですし、 タイトル順でもありません。 規則性が見当たりません。 しかもしばらくすると順番が変わってしまいます。 よろしくお願いいたします。
退会済みユーザー

退会済みユーザー

2019/02/20 10:30

マルチポストクズhttps://ja.wordpress.org/support/topic/%E3%82%AB%E3%82%B9%E3%82%BF%E3%83%A0%E3%83%95%E3%82%A3%E3%83%BC%E3%83%AB%E3%83%89%E3%81%AE%E5%80%A4%E6%95%B0%E5%AD%97%E3%81%A7%E8%A8%98%E4%BA%8B%E4%B8%80%E8%A6%A7%E3%82%92%E4%B8%A6%E3%81%B3%E6%9B%BF/
退会済みユーザー

退会済みユーザー

2019/02/22 08:25

マルチポスト先に書いた情報をこちらの質問にも追記してください。
tetutetutetu

2019/02/23 12:21

マルチポストごめんなさい。回答が得られないかもと思ったもので… 情報は追記しました。
退会済みユーザー

退会済みユーザー

2019/02/23 22:22

質問文に記載されているコードをデフォルトテーマに移植し、デフォルトテーマを使用した場合は正常に動作しますか?
guest

回答1

0

自己解決

get_postsの条件に「'meta_type' => 'NUMERIC'」を追加することで数値で並び替えできるようになりました。お騒がせいたしました。

<?php $ranking = get_posts( array( 'numberposts' => 10, 'orderby' => 'meta_value_num', 'meta_type' => 'NUMERIC', 'meta_key' => 'rank', 'order' => 'DESC' ) ); ?>

投稿2019/02/24 06:56

tetutetutetu

総合スコア46

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問