web-dev-qa-db-fra.com

Exclure les publications de la boucle principale en fonction de la méta-valeur

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' );

De là: https://core.trac.wordpress.org/ticket/18158

1
Dave

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:

  1. 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.

  2. Essayez de jouer avec des paramètres plus simples comme orderby etc. Vérifiez si cela fonctionne.

  3. Testez ce code pour les publications qui n'ont pas d'autre paramètre meta_query

  4. 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

  5. Et assurez-vous que la clé feature_post est correcte, difficile à croire, mais parmi mes étudiants, c’est l’erreur la plus courante.

0
Misha Rudrastyh