Filtrare i post tramite i meta data del post

10 apr 2012, 18:52:17
Visualizzazioni: 26.5K
Voti: 9

Voglio filtrare i post in modo che vengano mostrati solo quelli per i quali get_post_meta($post->ID, "project_cat", true) (che restituisce un ID del post) è uguale al valore da me specificato.

C'è un modo per farlo?

Sono particolarmente interessato a soluzioni compatibili con il plugin WP-Paginate.

2
Commenti

Il 56% è piuttosto basso - ricorda di tornare alle tue vecchie domande e accettare le risposte corrette. Questo le rimuove dalla lista di 'senza risposta' e aiuta gli altri a trovare soluzioni più facilmente. Le persone saranno anche più propense a offrire risposte se sanno che l'autore della domanda risponderà. :)

Stephen Harris Stephen Harris
10 apr 2012 18:58:34

Vedi la mia risposta qui sotto. Non è chiaro quando/dove vuoi filtrare i post. Se aggiorni la tua risposta per includere queste informazioni posso suggerirti quali 'conditionals' devi verificare. In alternativa, guarda l'esempio di query_post linkato. Il principio generale è lo stesso - impostare il valore meta_query.

Stephen Harris Stephen Harris
10 apr 2012 19:24:46
Tutte le risposte alla domanda 1
1
11

L'oggetto WP_Query accetta un argomento per i metadati dei post. In generale, vorrai fare quanto segue:

  $my_query = new WP_Query( 
    array(
      'post_type' => 'post',
      'meta_query' => array(
        array(
          'key' => 'project_cat',
          'value' => 'my-value',
        )
      ),

        // Altre proprietà della query
    ) 
  );

Dove 'my-value' è il tuo 'valore specificato'.

Esempio di utilizzo:

  add_action( 'pre_get_posts' , 'my_pre_get_posts' );

  function my_pre_get_posts( $query ) {

    // Verifica che sia la query principale e altre condizioni necessarie
    if( $query->is_main_query() ) {
        $query->set( 
          'meta_query', 
          array( 
            array(
              'key' => 'project_cat',
              'value' => 'my-value'
            )
          )
        );
    }

  }

Vedi WP_Query, pre_get_posts. Tutte le condizioni sono disponibili per l'uso. Attualmente questo viene eseguito su ogni query principale - cosa che probabilmente non vuoi.

In alternativa puoi usare query_posts (un metodo più semplice ma molto meno efficiente) per modificare la query solo per un'istanza specifica in un template.

10 apr 2012 19:23:07
Commenti

@TahirYasin - vedi il codex.

Stephen Harris Stephen Harris
12 set 2013 11:50:24