Je dois modifier la boucle principale (index.php) pour exclure les publications qui ont un ensemble de valeurs méta particulier (via un champ ACF True/False).
function exclude_featured_post( $query ) {
if ( $query->is_home() && $query->is_main_query()) {
// in case for some reason there's already a meta query set from other plugin
$meta_query = $query->get('meta_query')? : [];
// append yours
$meta_query[] = [
'key' => 'featured_post',
'value' => '1',
'compare' => '!='
];
$query->set('meta_query', $meta_query);
}
}
add_action( 'pre_get_posts', 'exclude_featured_post' );
Cela ne renvoie aucun message. Je pense que je dois fusionner ceci avec la requête principale, quelque chose comme:
global $wp_query;
$merged_args = array_merge( $wp_query->query, $exclude_featured_args );
$query->set('meta_query', $merged_args);
Cependant, cela ne renvoie également aucun message.
Mise à jour:
L'utilisation de 'compare' => 'NOT EXISTS` au lieu de' compare '=>'! = 'Semble renvoyer toutes les publications et exclure la méta_query.
function exclude_featured_post( $query ) {
if ( $query->is_home() && $query->is_main_query()) {
// in case for some reason there's already a meta query set from other plugin
$meta_query = $query->get('meta_query')? : [];
// append yours
$meta_query[] = [
'key' => 'featured_post',
'value' => '1',
'compare' => 'NOT EXISTS'
];
$query->set('meta_query', $meta_query);
}
}
add_action( 'pre_get_posts', 'exclude_featured_post' );
Dave, votre code semble bon sauf quelques éléments, essayez-le:
function exclude_featured_post( $query ) {
if ( is_front_page() && $query->is_main_query() ) {
$meta_query = $query->get('meta_query') ? $query->get('meta_query') : array();
// append yours
$meta_query[] = array(
'key' => 'featured_post', // please make sure that key is correct
'value' => '1',
'compare' => '!=' // you can also try 'NOT EXISTS' comparison
);
$query->set('meta_query', $meta_query);
}
}
add_action( 'pre_get_posts', 'exclude_featured_post' );
Si le code ci-dessus ne fonctionne pas pour vous, procédez comme suit:
Assurez-vous qu'il est en cours d'exécution pour la requête principale de la page d'accueil - essayez simplement de faire écho à l'intérieur de cette page - cette étape vous aidera à comprendre si la condition de la ligne 2 est correcte.
Essayez de jouer avec des paramètres plus simples comme orderby
etc. Vérifiez si cela fonctionne.
Testez ce code pour les publications qui n'ont pas d'autre paramètre meta_query
Essayez d’utiliser les paramètres meta_key
, meta_value
et meta_compare
au lieu de meta_query. Vous pouvez trouver un exemple ici https://rudrastyh.com/wordpress/meta_query.html
Et assurez-vous que la clé feature_post
est correcte, difficile à croire, mais parmi mes étudiants, c’est l’erreur la plus courante.