WordPress 5.2.1を使用しています。
やりたいこと
WP_QUERYでカスタムフィールド2つの値を使って第1、第2ソートを指定して並び替える。
name, title, year の3つがカスタムフィールドで、それぞれの記事がこのような具合です。
投稿タイトル | name | kana | year |
---|---|---|---|
ABC | ICHIRO | いちろう | 1982 |
TTT | ICHIRO | いちろう | 1983 |
BBB | JIRO | じろう | 1984 |
GGG | SABURO | さぶろう | 1994 |
AAA | SABURO | さぶろう | 1983 |
問題点
第1、第2ソートとも基準がカスタムフィールドである場合、ソートがうまくいきません。
うまくいくパターン(カスタムフィールドが一方のみ) 第1:投稿タイトル 第2:name 第1:name 第2:投稿タイトル うまくいかないパターン(カスタムフィールドを1つ使用) 第1:year 第2:name ←うまくいかない 第1:name 第2:kana ←うまくいかない 第1:kana 第2:year ←うまくいかない
やってみたこと
とりあえず、それぞれ一つだけを基準にソートしてみたのですが、うまくいったので入力データ自体は大丈夫かと思います。
↓1つだけのソートは問題なし
PHP
1 2//投稿タイトルでソート 3$param = array( 4 'post_type' => array('post'), 5 'orderby' => 'title', 6 'order' => 'ASC', 7); 8 9//カスタムフィールドでソート 10$param = array( 11 'post_type' => array('post'), 12 'orderby' => 'meta_value', 13 'meta_key' => 'name', //kana, yearもうまくいく 14 'order' => 'DESC', 15); 16
どちらかのみカスタムフィールドの場合も第2ソートも問題なく反映できました。
↓カスタムフィールドがどちらか一方でも問題なし
PHP
1$param = array( 2 'post_type' => array('post'), 3 'orderby' => array('name' => 'ASC' , 'title'=>'ASC' ), 4 'meta_key' => 'name' 5);
↓うまくいかないです
カスタムフィールド2つの場合、うまくいかないです。
PHP
1$param = array( 2 'post_type' => array('post'), 3 'orderby' => array('name' => 'ASC' , 'year'=>'DESC' ), 4 'meta_query' => array( 5 array( 6 'key' => 'name', 7 ), 8 array( 9 'key' => 'year', 10 ) 11 ) 12);
そもそも条件2つともカスタムフィールドのやり方がよくわからくて、色々と調べて試行錯誤したのですが、よくわかりませんでした。
参考にした記事
1.関数リファレンス/WP Query
2.WordPress4.0から使えるようになった複雑な’oderby’を使ってみる
3.wordpress カスタムフィールドの値でソート(複数項目)
そもそも
● カスタムフィールドが複数の場合、従来使っていた'meta_key'には何かいれなければならないのか
● 'meta_query'を上記のような使い方であっているのか(meta_keyを入れない代わりに使用?)
● サイトによっては 指定キー名に「meta_」とつけているものもあり、仕様がわからない。こちらもためしてみたが、うまくいかず。。
等いまいちわからないことだらけでした。
どなたか詳しい方、ご教示&やり方を教えていただけますと幸いです。
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。