$args = array( 'post_type' => 'bars',
'posts_per_page' => -1
'orderby' => array( 'meta_value' => 'DESC', 'title' => 'ASC' ),
'meta_query' => array(
'relation' => 'OR',
array(
'key' => 'featured_venue',
'compare' => 'NOT EXISTS',
),
array(
'relation' => 'OR',
array(
'key' => 'featured_venue',
'value' => true,
),
array(
'key' => 'featured_venue',
'value' => 0,
),
),
),
);
$query = new WP_Query($args);
J'ai la requête ci-dessus en place pour le type de message nommé bars. La barre CPT utilise ACF pour créer une barre en utilisant la case à cocher Vrai/Faux d’ACF ( https://www.advancedcustomfields.com/resources/true-false/ ) - ACF est en train de créer la méta clé sélectionnée_venue. Toutefois, depuis que le champ ACF a été ajouté aux publications existantes, la clé méta n’est pas présente dans toutes les publications. J'ai donc les états suivants:
Mon objectif est de répertorier tous les sites et d’avoir d'abord présenté les sites, puis tous les autres par ordre alphabétique. Cependant, ma requête me donne actuellement le résultat suivant:
J'ai essayé de changer les valeurs de comparaison, mais je n'ai pas pu obtenir les résultats souhaités. Au lieu de cela, il laissait toujours tomber les publications avec meta_key, ou celles sans.
Est-il possible de modifier la requête de la manière souhaitée ou dois-je ajouter en bloc la clé méta Feature_venue à toutes les publications?
Cela peut être fait en fournissant une valeur "par défaut" à l'instruction ORDER BY
.
Essayez d'ajouter ceci avant votre appel new WP_Query($args);
:
$setDefaultOrderby = function($statement) {
return str_replace('wp_postmeta.meta_value', "COALESCE(wp_postmeta.meta_value, 'false')", $statement);
};
add_filter('posts_orderby', $setDefaultOrderby);
et cela après:
remove_filter('posts_orderby', $setDefaultOrderby);
Changez le 'false'
avec la valeur par défaut dont vous avez besoin.
J'utilise COALESCE
ici, qui sélectionne en gros un premier argument que vous lui transmettez, qui n'est pas NULL
, ce qui vous permet essentiellement de fournir une solution de secours pour une publication sans clé méta.