Ottieni post per meta valore


27

Vorrei elencare tutti i post che hanno una chiave cp_annonceurcon il valore professionnel.


8
Si prega di essere consapevoli del fatto che è necessario aver studiato il problema e fatto un tentativo di risolverlo prima di pubblicare una domanda. Se non fossi stato nuovo di zecca qui avrei probabilmente votato verso il basso la domanda e ho continuato, invece di rispondere. Nello spirito di "Welcome to the Stack" questa è la tua ape libera. Dai un'occhiata a Come porre domande future.
s_ha_dum,

Questo mi ha fatto perdere un po 'di tempo a causa della risposta non accettata di seguito. Quindi lascio qui i miei 2 centesimi. Non ha mai risposto, né ha accettato la risposta di seguito. Perché non rimuovi queste domande mentre ci sono dozzine di domande simili qui intorno?
mircobabini,

Risposte:


47

Quello che stai chiedendo è a meta_query

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

Tutte le informazioni di cui hai bisogno sono nel Codice .


3
@Binner: se questo ha risolto il problema, contrassegnalo come "Accettato". Cerca il segno di spunta vicino alle frecce di voto a sinistra.
s_ha_dum,

8

Esistono due modi per farlo:

  1. Intercetta la query principale su 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. Aggiungi una query aggiuntiva

    $second_loop = get_posts( array(
        'meta_key'   => 'cp_annonceur',
        'meta_value' => 'professionnel',
    ) );

2
Bello sapere a breve con get_posts ()
Andrew Welch il

8

Ho usato la selezione personalizzata (potrebbe essere una prestazione migliore)

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

Ispirato da https://tommcfarlin.com/get-post-id-by-meta-value/


1
Potrebbe avere prestazioni migliori, ma getta via l'idea di avere funzioni di Wordpress per cercare (e memorizzare nella cache) i dati. Inoltre, cosa accadrà se WP decide di cambiare la struttura della tabella? :)
Erenor Paz

2

Possiamo ottenere il risultato desiderato con Meta query di 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 );

Per una guida più dettagliata sulla meta query segui questo blog: http://www.codecanal.com/get-posts-meta-values/


Posso sapere perché questo post_per_pagevalore è -1?
Abhay Gawade,

1
@AbhayGawade Puoi limitare il numero massimo di risultati usando quel parametro, -1 significa nessun limite.
Kush,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.