クエリでマルチレベルの順序付けを行う必要があります。問題は、SQLのように1つの値をDESCに、もう1つをASCに順序付けることです。次のSQLをターミナルで実行すると、必要なものが得られるようです。
SELECT DISTINCT * FROM wp_posts
INNER JOIN wp_postmeta
ON wp_posts.ID = wp_postmeta.post_id
WHERE wp_posts.post_type = 'post'
AND wp_postmeta.meta_key = 'pb_issue_featured'
AND wp_posts.post_status = 'publish'
ORDER BY wp_postmeta.meta_value DESC, wp_posts.menu_order ASC;
pb_issue_featured
ブール値です。私が必要とする最終結果は、このフィールドのメタ値が1である投稿を上部に表示するクエリです。次に、2番目の層の順序が指定されていますmenu_order
(私は投稿タイプの注文プラグインを使用しています)。
問題は、ブール値を高から低(1から0)に並べる必要があるのですが、menu_orderはその逆です。プラグインで最初に注文されるもののメニュー順序は1です。そのため、WP_Queryで組み込みの「orderby」を使用しても機能しません。誰か提案がありますか?「posts_orderby」フィルターを調べましたが、取得できませんでした。それがどこに適用されるべきか、どうやってそれをトラブルシューティングできるのか本当にわかりませんでした。それは私がそれを持っていた方法を再注文しなかっただけです。
助けてくれてありがとう!関連がある場合は、実際のWP_Queryを投稿しますが、できる限り短くしたいと考えています。
クエリ引数:
$args = array(
'post_type' => 'post',
'meta_key' => 'pb_issue_featured',
'orderby' => 'meta_value',
'order' => 'DESC',
'post_status' => 'publish',
'posts_per_page' => $posts,
'paged' => $paged,
'meta_query' => array(
array(
'key' => 'headline',
'value' => 1,
'compare' => '!='
)
)
);
$q = new WP_Query($args);
まあ、それが正しく形成されているかどうかを確認するには、WP_Queryを投稿する必要があります。
—
MarinBînzari2013
それはすべての栄光です。私は現在何も注文していませんが、そのブールメタ値b / cは、そのレベルまたは並べ替えを機能させる唯一の方法でした。このサイトでは、「注目」投稿よりも優先される「ヘッドライン」投稿も使用しています。したがって、このクエリでそれらを除外します
—
ian