もうかなり長い間戦っていて、大きなものが足りないと思っています。 CPT投稿にはメタデータがある場合とない場合があります(_vip_post [0|1]
、_thumbnail_id [null|numeric]
)。
私が_thumbnail_id
を問い合わせるならば、それは大丈夫です、そして、働きます:
SELECT SQL_CALC_FOUND_ROWS wp_posts.*
FROM wp_posts
LEFT JOIN wp_postmeta m ON ( wp_posts.ID = m.post_id AND m.meta_key = '_thumbnail_id')
ORDER BY
m.meta_key DESC,
wp_posts.post_date DESC
サムネイル付きの投稿を最初に返します。最後に_thumbnail_id
= nullが続きます。今のところ十分です。ワーキング。
しかし、もし私が私の新しい_vip_post
meta_keyを問い合わせるならば、それは順序付けにおいて完全に無視されます。同じパターン.
SELECT SQL_CALC_FOUND_ROWS wp_posts.*
FROM wp_posts
LEFT JOIN wp_postmeta m ON ( wp_posts.ID = m.post_id AND m.meta_key = '_vip_post')
ORDER BY
m.meta_key DESC,
wp_posts.post_date DESC
post_date
の順に並んでいるだけです。動作していません。
ズラテフ
meta_keyはカスタム投稿タイプの名前で、VARCHAR(255)です。
meta_valueはキーの値であり、ロングテキストです。
クエリでは、値ではなくフィールドの名前で並べ替えています。 LEFT JOINを使用していてCPTがnullになる可能性があるため、クエリは_thumbnail_idに対して機能します。
このクエリを実行したかどうかがわかります
SELECT SQL_CALC_FOUND_ROWS wp_posts.* ,m.*
FROM wp_posts
LEFT JOIN wp_postmeta m ON ( wp_posts.ID = m.post_id AND m.meta_key = '_thumbnail_id')
ORDER BY
m.meta_key ASC,
wp_posts.post_date DESC
Meta_keyのnullを参照してください。
2番目のケースでは、CPTの_vip_post ISが常に存在するため、フィールド名の順序付けは機能しません。 meta_valueで並べる必要があります。
次のようにしてください。
SELECT SQL_CALC_FOUND_ROWS wp_posts.* ,m.*
FROM wp_posts
LEFT JOIN wp_postmeta m ON ( wp_posts.ID = m.post_id AND m.meta_key = '_vip_post')
ORDER BY
m.meta_value ASC,
wp_posts.post_date DESC
* m.meta_value DESC *を使用して順序を変更できます。