Je suis en utilisant le pre_get_posts hook pour personnaliser ma requête pour une archive de type publication personnalisée.
Certaines publications de ce type de publication personnalisée ont une clé méta mp_micropub_accredited avec la méta valeur de 1 et d'autres n'ont pas cet ensemble de clés méta.
J'utilise le code suivant,
fonction micropubs_filter_posts ($ requête) { if (! is_admin () && $ requête-> is_post_type_archive ('micropubs') && $ requête-> is_main_query ()) { $ query-> set ('posts_per_page', 5); $ accredited = filter_input (INPUT_GET, 'orderby', FILTER_SANITIZE_STRING); if (vide ($ accrédité)) return; if ($ accrédité === 'accrédité') { $ query-> set ('meta_key ',' mp_micropub_accredited '); $ query-> set (' orderby ',' meta_value_num '); } } } add_action ('pre_get_posts', 'micropubs_filter_posts');
Ainsi, lorsque je localise cette adresse dans mon navigateur, elle affiche uniquement les publications avec le jeu de clés méta et aucune autre publication.
http: // localhost/site/post-type-archive /? orderby = accrédité
Comment est-il possible d'inclure tous les autres postes qui n'ont pas le mp_micropub_accredited meta key set mais sont affichés après ceux qui sont?
Votre aide a beaucoup apprécié. :)
Je vous conseillerais lorsque vous mettez à jour des méta-valeurs avec 1 mise à jour avec 0. Je veux dire, définissez la clé dans toutes les publications avec 1 ou 0 pour éviter la requête complexe.
Vous pouvez toujours le faire avec un script simple. Il vérifiera si la clé n'existe pas, puis le mettra à jour avec 0. Votre code actuel fonctionnera comme un charme.
OU
Vous pouvez utiliser compare
avec NOT EXISTS
$meta_query = array(
'relation' => 'OR',
array(
'key' => 'mp_micropub_accredited',
'value' => 1
),
array(
'key' => 'mp_micropub_accredited',
'compare' => 'NOT EXISTS'
)
);
$query->set( 'meta_query', $meta_query );
$query->set( 'orderby', 'meta_value_num' );
Remarque: Cette solution fonctionnera uniquement avec WP> = 3.9 car NOT EXISTS
fonctionne uniquement avec les versions 3.5 et supérieures et il y avait un bogue avec NOT EXISTS
qui a été corrigé dans la version 3.9!