Ottieni i post tramite valore meta

11 mag 2014, 22:56:24
Visualizzazioni: 155K
Voti: 50

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

1
Commenti

Tieni presente che ci si aspetta che tu abbia già ricercato il problema e fatto un tentativo di risolverlo prima di pubblicare una domanda. Se non fossi un nuovo arrivato qui, probabilmente avrei votato negativamente la domanda e sarei passato oltre, piuttosto che rispondere. Nello spirito di "Benvenuto su Stack" questa è la tua occasione gratuita. Ti preghiamo di dare un'occhiata a [ask] per le domande future.

s_ha_dum s_ha_dum
11 mag 2014 23:05:35
Tutte le risposte alla domanda 6
6
81

Quello che stai chiedendo è una meta_query

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

Tutte le informazioni di cui hai bisogno sono nel Codex.

11 mag 2014 23:05:26
Commenti

@Principiante : se questo ha risolto il problema, per favore segnalo come "Accettato". Cerca il segno di spunta vicino alle frecce di voto a sinistra.

s_ha_dum s_ha_dum
11 mag 2014 23:35:35

Per qualche motivo usare new WP_Query($args) e poi chiamare get_posts non funziona per me. Passare direttamente l'array $args alla funzione get_posts come argomento invece funziona.

Kunal Kunal
6 mag 2020 00:24:03

@Kunal Non hai bisogno di chiamare get_posts. Usa il codice sopra, e ottieni i post così: $query->posts. Dovrebbe restituire un array. Non dimenticare di leggere il link nel commento, poiché c'è qualcosa che manca nel codice: $args = array( 'post_type' => 'your-cpt', 'meta_key' => 'your-meta', 'meta_query' => array( array( 'key' => 'cp_annonceur', 'value' => 'professionnel', 'compare' => '=', ) ) ); $query = new WP_Query($args);

BonisTech BonisTech
14 gen 2021 02:32:05

@s_ha_dum correzione sintattica minore - manca una , dopo 'custom-meta-key'. Avrei modificato direttamente, ma non è possibile fare una modifica di un solo carattere...

Steven Steven
29 apr 2021 15:57:12

Qual è la differenza tra meta_key e key?

Michael Rogers Michael Rogers
14 gen 2022 13:20:26

Questo sarebbe sbagliato. Perché dovresti passare sia meta_key che key? Non è così come viene descritto nella documentazione di WP Query. Probabilmente quello che intendevi dire è qualcosa tipo 'post_type' => 'product', 'meta_query' => array( array( 'key' => 'color', 'value' => 'blue', 'compare' => 'NOT LIKE', ), ), ?

User User
24 set 2022 10:22:07
Mostra i restanti 1 commenti
3
16

Ci sono due modi per farlo:

  1. Intercettare la query principale con pre_get_posts:

    add_action( 'pre_get_posts', function( $query )
    {
        // gestisce solo la query principale
        if ( ! $query->is_main_query() )
            return;
    
        $query->set( 'meta_key',   'cp_annonceur' );
        $query->set( 'meta_value', 'professionnel' );
    } );
    
  2. Aggiungere una query aggiuntiva

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

Un esempio più completo è disponibile in questa risposta.

11 mag 2014 23:08:01
Commenti

Buono a sapersi il metodo abbreviato con get_posts()

Andrew Welch Andrew Welch
26 gen 2017 18:06:09

Come si fa con più chiavi/valori meta?

G-J G-J
10 apr 2020 01:57:44

@G-J potresti dare un'occhiata a questo esempio.

kaiser kaiser
15 apr 2020 18:18:04
3
12

Ho utilizzato una select personalizzata (potrebbe avere prestazioni migliori)

$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/

28 gen 2016 16:40:33
Commenti

Potrebbe avere prestazioni migliori, ma abbandona completamente l'idea di utilizzare le funzioni di WordPress per cercare (e memorizzare nella cache) i dati. Inoltre, cosa succederebbe se WordPress decidesse di modificare la struttura della tabella? :)

Erenor Paz Erenor Paz
3 mar 2017 12:11:58

@ErenorPaz Capisco quello che dici, ma questo approccio renderebbe più semplice gestire più criteri basati su meta key/values... Esiste un modo ufficiale per gestire più criteri?

G-J G-J
10 apr 2020 01:59:57

Intendi qualcosa come WHERE metatable1.meta_key = 'cp_annonceur' AND metatable1.meta_value = 'professionnel' AND metatable2.meta_key = 'cp_other_meta' AND metatable2.meta_value = 'other_value'? (Nota che suppongo di fare un join sulla stessa tabella posts_meta usando due nomi metatable1 e metatable2). Questo può essere ottenuto aggiungendo il campo meta_query (come array) alla query. Dai un'occhiata a: https://developer.wordpress.org/reference/classes/wp_query/#order-orderby-parameters e vai al paragrafo "‘orderby’ with multiple ‘meta_key’s"

Erenor Paz Erenor Paz
10 apr 2020 14:19:09
3

Possiamo ottenere il risultato desiderato con la Meta query di WordPress:

// il meta_key 'diplay_on_homepage' con il 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 sulle meta query segui questo blog: http://www.codecanal.com/get-posts-meta-values/

4 ott 2017 08:46:42
Commenti

Posso sapere perché il valore post_per_page è impostato a -1?

Abhay Abhay
27 apr 2018 08:07:56

@AbhayGawade Puoi limitare il numero massimo di risultati usando quel parametro, -1 significa nessun limite.

Kush Kush
20 giu 2018 20:49:03

Grazie, funziona perfettamente. :)

Arman H Arman H
23 feb 2022 08:05:08
0

Puoi facilmente recuperare i post utilizzando la funzione integrata di WordPress chiamata get_posts Puoi trovare maggiori dettagli su get_posts qui https://developer.wordpress.org/reference/functions/get_posts/

$posts = get_posts(array(
    'numberposts'   => -1,
    'post_type'     => 'post',
    'meta_key'      => 'cp_annonceur',
    'meta_value'    => 'professionnel'
));
31 mag 2021 18:48:12
2

Prova questo, funziona per me

global $wpdb;
$meta_key = '_request_body';

$data = $wpdb->get_results($wpdb->prepare( "SELECT DISTINCT meta_value FROM $wpdb->postmeta WHERE meta_key = %s", $meta_key) , ARRAY_N  );

$result = [];
foreach($data as $array){
    $result[] = $array[0];
}

print_r($result);
20 gen 2021 12:20:12
Commenti

Questo elencherebbe i possibili valori distinti, che non è esattamente ciò che la domanda chiede.

Rup Rup
20 gen 2021 18:19:34

Non dovresti mai accedere al database per operazioni fondamentali di WordPress come ottenere i post. Dovresti sempre usare l'API astratta di WordPress che fa tutto il lavoro pesante per te e assicura che il tuo codice continui a funzionare se qualcosa viene modificato internamente.

Zarko Jovic Zarko Jovic
18 nov 2022 22:03:39