Je me bats déjà assez longtemps et commence à penser que je manque quelque chose de grand. Les publications CPT peuvent avoir ou non des métadonnées (_vip_post [0|1]
, _thumbnail_id [null|numeric]
).
Si je demande pour _thumbnail_id
c'est ok et fonctionne:
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
Retourne les messages avec les vignettes en premier, _thumbnail_id
= null vient en dernier. assez bon pour l'instant. Travail.
Mais si je demande ma nouvelle _vip_post
meta_key, la commande l'ignore totalement. Même motif.
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
Vient de commander par post_date
. Ne fonctionne pas.
Zlatev
meta_key est le nom du type de publication personnalisé. Il s'agit d'un VARCHAR (255).
meta_value est la valeur de la clé et est un longtext.
Avec votre requête, vous ne commandez pas par valeurs, mais par le nom du champ. La requête fonctionne pour _thumbnail_id car vous utilisez LEFT JOIN et le CPT peut être null.
Vous pourriez voir si vous exécutez cette requête
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
Voir le null pour la meta_key
Dans le second cas, le _Vip_post IS du CPT est toujours présent, donc l'ordre dans le nom du champ ne fonctionne pas. Vous devez le commander par meta_value.
Essayez quelque chose comme:
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
Vous pouvez modifier l'ordre en utilisant * m.meta_value DESC *.