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

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

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

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

Q&A

2回答

2402閲覧

WordPressのWP_Queryを使用した記事並び替えについて。

Anon_

総合スコア334

WordPress

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

0グッド

0クリップ

投稿2017/03/18 08:57

お世話になります。

記事をアクセス順に並び替えるため、WP_Queryで並び替えようとしているのですが思うように取得できず悩んでおります。
記事のアクセス数はviewsというカスタムフィールドkeyに保存されています。

そこで最初は、下記の配列をWP_Queryに渡したのですが、これですとカスタムフィールドにviewsが保存
されていない記事は除外されてしまいます。希望としてはカスタムフィールドにviewsが保存されていない記事は並び替えの最後に並ぶようにしたいです。(※viewsが保存されていない記事は一度もアクセスがない記事です)

PHP

1$args = array( 2 'meta_key' => 'views', 3 'orderby' => 'meta_value', 4 'order' => 'DESC', 5 'cat' => 'カテゴリーIDを指定' 6);

そこで渡す配列を修正し以下のようにしたところ、viewsが保存されていない記事も取得することはできたのですが今度はviewsの数による並び替えができておらず手詰まりの状態です。

PHP

1$args = array( 2 'orderby' => 'meta_value_num', 3 'order' => 'DESC', 4 'cat' => 'カテゴリIDを指定', 5 'meta_query' => array( 6 'relation' => 'OR', 7 array( 8 'key' => 'views', 9 'type' => 'NUMERIC', 10 ), 11 12 array( 13 'key' => 'views', 14 'compare' => 'NOT EXISTS', 15 ) 16 ) 17);

どなたかよい方法をご存知ないでしょうか。
よろしくお願いします。

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

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

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

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

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

guest

回答2

0

質問者様の希望する回答からはずれていますが、自分であれば、
'views'が保存されていないのならば、保存してしまえばいいじゃない作戦で対応します。

つまり、'views'キーがない投稿を取得し、'views'キーに0を設定する、
後は、'views'キーで並べ替えをして、好きなように出力します。

投稿2017/03/19 02:32

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

Anon_

2017/03/19 04:48

ありがとうございます。 現状はその形で対応していますが、後学の為、もしそういった方法があれば知っておきたいと思いました。 上記の方法ですと新規投稿作成時にかならずvewsを作成しないといけないですね。 ありがとうございます。
退会済みユーザー

退会済みユーザー

2017/03/19 05:06

> 上記の方法ですと新規投稿作成時にかならずvewsを作成しないといけないですね。 「'views'キーのない投稿を取得し、add_post_metaで0をセットする」コードを、WP_Queryでアクセス順に並べ替える前に実行させるようにしておけば、新規投稿作成時に手作業で設定する必要ありません。 まあ、WP_Queryを実行するサーバーリソース的なコストが余計にかかることは否定できませんが。
guest

0

スマートなやり方ではないかもしれませんが、
アクセスがないものもviewsの値を取れるようにしてはどうでしょう。
(viewsをどうやってとているのかわからないので漠然としてますが)

たとえば、viewsのカウントのスタートを1にするとかして、値を持たせればいいのではないでしょうか。
(あるいは、並べ替えの時だけ一律1プラスするとか)

投稿2017/03/19 01:04

8-0_nyan5

総合スコア2352

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

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

Anon_

2017/03/19 02:06

投稿記事にアクセスがあったときはじめてviewsがカスタムフィールドに保存されます。 アクセスがないものもあらかじめvewsを登録されるようにしておけば良いという方法は今回のことに限って言えばそうなのかもしれませんが、私が知りたいのはWP_Queryでそういった指定の方法があるのかという事なのです。 すみません。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問