Obtenez des messages par méta-valeur

27

Je voudrais répertorier tous les messages qui ont une clé de cp_annonceuravec la valeur professionnel.

Débutant
la source
8
Veuillez noter que vous devez avoir recherché le problème et tenté de le résoudre avant de poster une question. Si vous n'aviez pas été tout nouveau ici, j'aurais probablement rejeté la question et poursuivi, plutôt que d'y répondre. Dans l'esprit de "Welcome to the Stack", voici votre abeille libre. Veuillez consulter la section Comment poser des questions futures.
s_ha_dum
Celui-ci m'a fait perdre du temps à cause de la réponse non acceptée ci-dessous. Je laisse donc ici mes 2 cents. Il n'a jamais répondu ni accepté la réponse ci-dessous. Pourquoi ne supprimez-vous pas simplement ces questions alors qu'il y a des dizaines de questions similaires ici?
mircobabini

Réponses:

47

Ce que vous demandez, c'est un meta_query

$args = array(
   'meta_query' => array(
       array(
           'key' => 'cp_annonceur',
           'value' => 'professionnel',
           'compare' => '=',
       )
   )
);
$query = new WP_Query($args);

Toutes les informations dont vous avez besoin se trouvent dans le Codex .

s_ha_dum
la source
3
@Beginner: si cela a résolu le problème, veuillez le marquer "Accepté". Recherchez la coche près des flèches de vote à gauche.
s_ha_dum
8

Il y a deux façons de procéder:

  1. Intercepter la requête principale sur pre_get_posts:

    add_action( 'pre_get_posts', function( $query )
    {
        // only handle the main query
        if ( ! $query->is_main_query() )
            return;
    
        $query->set( 'meta_key',   'cp_annonceur' );
        $query->set( 'meta_value', 'professionnel' );
    } );
  2. Ajouter une requête supplémentaire

    $second_loop = get_posts( array(
        'meta_key'   => 'cp_annonceur',
        'meta_value' => 'professionnel',
    ) );
kaiser
la source
2
Ravi de connaître le chemin court avec get_posts ()
Andrew Welch
8

J'ai utilisé une sélection personnalisée (peut-être de meilleures performances)

$posts = $wpdb->get_results("SELECT * FROM $wpdb->postmeta
WHERE meta_key = 'cp_annonceur' AND  meta_value = 'professionnel' LIMIT 1", ARRAY_A);

Inspiré de https://tommcfarlin.com/get-post-id-by-meta-value/

michalzuber
la source
1
Il pourrait avoir de meilleures performances, mais il jette l'idée d'avoir des fonctions Wordpress pour rechercher (et mettre en cache) les données. Et, aussi, que se passera-t-il si WP décide de changer la structure de la table? :)
Erenor Paz
2

Nous pouvons obtenir le résultat souhaité avec la requête Meta de WordPress:

// the meta_key 'diplay_on_homepage' with the meta_value 'true'
$cc_args = array(
    'posts_per_page'   => -1,
    'post_type'        => 'post',
    'meta_key'         => 'cp_annonceur',
    'meta_value'       => 'professionnel'
);
$cc_query = new WP_Query( $cc_args );

Pour un guide plus détaillé concernant la méta-requête, suivez ce blog: http://www.codecanal.com/get-posts-meta-values/

Jitendra Damor
la source
Puis-je savoir pourquoi cette post_per_pagevaleur est -1?
Abhay Gawade
1
@AbhayGawade Vous pouvez limiter le nombre maximum de résultats en utilisant ce paramètre, -1 signifie aucune limite.
Kush