WP_Query è una classe di wordpress utile per gestire le richieste di articoli e pagine all’interno di un template. WP_Query è utile soprattutto quando abbiamo a che fare con query multiple all’interno della stessa pagina da affiancare alla query principale.

Un esempio tipico è una lista di articoli in evidenza da inserire sotto ogni post.

Articoli in evidenza con wp query


/**
 * Elenco post taggati 'evidenza'
 *
 */
function isw_articoli_in_evidenza() {
	$args = array(
		'tag' => 'evidenza',
		'posts_per_page' => '-1',
	);
	$evidenza = new WP_Query( $args );
	if( $evidenza->have_posts() ):
		echo '<ul>';
		while ( $evidenza->have_posts() ) : $evidenza->the_post();
			echo '<li><a href="' . get_permalink() . '">' . get_the_title() . '</a></li>';
		endwhile;
		echo '</ul>';
	endif;
	wp_reset_postdata();
}

Al momento della creazione della query passiamo un array con i parametri della query. Facciamo una richiesta per tutti i post con tag ‘evidenza’. La stessa query poteva essere impostata usando una scrittura basata sulle query string.

$evidenza = new WP_Query( 'tag=evidenza&posts_per_page=-1' );

Nell’esempio abbiamo usato i metodi have_posts() per verificare l’esistenza di almeno un articolo con il tag ‘evidenza’, the_post() per mostrare il contenuto del post. Per ricavare il permalink dell’articolo e il titolo abbiamo usato invece le funzioni get_permalink() e get_the_title().

Queste funzioni utilizzano la variabile globale $post la quale, durante il ciclo while, $post assume di volta in volta il contenuto relativo a un singolo post in evidenza.

Dopo aver ciclato tutti gli articoli in evidenza, è necessario ripristinare la variabile $post con il contenuto dell’articolo principale. Per questo motivo abbiamo usato la funzione wp_reset_postdata();

Per altri metodi e proprietà è possibile consultare il codex di wordpress.

Invece nel resto di questo post vediamo un elenco di parametri che possono essere usati nell’array $args.

Parametri WP_Query

Post e pagine

Mostrare i contenuti in base ad alcune caratteristiche dei post o pagine. I numeri rappresentano un indice mentre quando usiamo del testo ci riferiamo a uno slug.

    'p' => 1,
    'name' => 'ciao-modo',
    'page_id' => 1,
    'pagename' => 'pagina-di-esempio',
    'pagename' => 'contact_us/canada',
    'post_parent' => 1,
    'post__in' => array(1,2,3),
    'post__not_in' => array(1,2,3),

Post type

Carichiamo i post che appartengono a un dato post type. ‘annunci’ è lo slug di un post type custom.


    'post_type' => array(
            'post',               // articoli
            'page',               // pagine
            'revision',           // revisioni
            'attachment',         // allegati
            'annunci',            // custom post type annunci
            'any'                 // tutti i post type tranne revision e quelli che hanno exclude_from_search impostato su true
            ),  

Stato di un post

Il valore di default è publish.

    'post_status' => array(
            'publish',                      // pubblicato
            'pending',                      // in attesa di revisione
            'draft',                        // bozza
            'auto-draft',                   // bozza creata automaticamente per un nuovo articolo
            'future',                       // post programmato (data futura)
            'private',                      // non visibile a chi non è loggato
            'inherit',                      // revisioni
            'trash',                        // nel cestino
            'any'                          // tutti i post tranne quelli che hanno exclude_from_search impostato su true
            ),

Autori

Usare l’id dell’autore o l’user_nicename (non il nome). Per escludere un autore far precedere l’id dal segno meno (-2)

    'author' => 1,2,3,
    'author_name' => 'paolo',

Data di pubblicazione

Post associati a un certo periodo di pubblicazione

    'year' => 2015,                         // 4 numeri
    'monthnum' => 3,                        // marzo
    'w' =>  25,                             // da 0 a 53
    'day' => 17,                            // da 1 a 31
    'hour' => 13,                           // da 0 a 23
    'minute' => 19,                         // da 0 a 60
    'second' => 30,                         // da 0 a 60

Categorie

Come mostrare i post associati a una o più categorie. Usare l’indice numerico o lo slug.

    'cat' => 6,
    'category_name' => 'sport', 'attualita',
    'category__and' => array( 4, 9 ),
    'category__in' => array( 5, 9 ),
    'category__not_in' => array( 3, 6 ),      

Tag

Post associati a un tag. Come per le categorie utilizzare id e slug.


    'tag' => 'ricette',
    'tag_id' => 9,
    'tag__and' => array( 1, 6, 12),
    'tag__in' => array( 2, 6, 9),
    'tag__not_in' => array( 4, 11, 14),
    'tag_slug__and' => array( 'pesce', 'carne'),
    'tag_slug__in' => array( 'dolci', 'frutta'),  

Tassonomie personalizzate

Mostrare i post associati a una certa tassonomia.
È possibile creare query per tassonomie multiple usando il parametro ‘relation’

    'tax_query' => array(                     //(array) - use taxonomy parameters (available with Version 3.1).
    'relation' => 'AND',                      //(string) - Possible values are 'AND' or 'OR' and is the equivalent of ruuning a JOIN for each taxonomy
      array(
        'taxonomy' => 'colore',                  // Tassonomia
        'field' => 'slug',                       // Cosa usare per selezionare la tassonomie (id o slug)
        'terms' => array( 'rosso', 'verde' ),    // Termini della tassonomia. Possibili valori stringa/intero/array
        'include_children' => true,              // Includere o meno le i termini annidati nelle tassonomie gerarchiche
        'operator' => 'IN'                       // Testare la corrispondenza del termine. Possibili valori 'IN', 'NOT IN', 'AND'.
      ),
      array(
        'taxonomy' => 'actor',
        'field' => 'id',
        'terms' => array( 103, 115, 206 ),
        'include_children' => false,
        'operator' => 'NOT IN'
      )
    ),

Sticky post

Di default non sono visualizzati (false)

 'ignore_sticky_posts' => true,          // visualizza sticky post

Custo field

È possibile fare query in base al valore di un campo personalizzato (custom field) o meta box

   'meta_query'=> array(
      array(
          'key' => 'prezzo',
          'value' => 100,
          'type' => 'numeric',
          'compare' => '>=',  //  Operatore per testare 'value'. Valori possibili '=', '!=', '>', '>=', '<', '<=', 'LIKE', 'NOT LIKE', 'IN', 'NOT IN', 'BETWEEN', 'NOT BETWEEN'
       )

È possibile creare query per campi multipli usando il parametro ‘relation’

    'meta_query' => array(
      'relation' => 'OR',                   // default AND
       array(
         'key' => 'regione',
         'value' => 'toscana',
         'compare' => '='
       ),
       array(
         'key' => 'price',
         'value' => array( 1,200 ),
         'compare' => 'NOT LIKE'
       )

Ordinare i risultati

Per decidere se ordinare in modo ascendente (dal più piccolo al più grande) o discendente

    'order' => 'DESC',          // ASC o DESC

In base a quale parametro ordinare i post. Di default i post sono ordinati in base alla data. Possibili valori sono

  • date‘ – per data (default).
  • none‘ – nessun ordinamento.
  • ID‘ – in base all’indice del post.
  • author‘ – per autore.
  • title‘ – per titolo.
  • modified‘ – in base all’ultima data di modifica.
  • parent‘ – in base all’id del post o della pagina a un livello superiore
  • rand‘ – ordinamento casuale.
  • comment_count‘ – in base al numero di commenti
  • menu_order‘ – utilizzato soprattutto per pagine (meta box ‘ordinamento’ nell’editor)
  • meta_value‘ – usato assieme a ‘meta_key=chive_campo’ nella stessa query. Ordina in base al campo sia numerico che testuale.
  • meta_value_num‘ – usato assieme a ‘meta_key=chive_campo’ che deve essere presente nella stessa query. Ordina in base al campo numerico
  • post__in‘ – Conserva l’ordine post__in array (available with Version 3.5).
    'orderby' => 'date',                    

Parametri di ricerca

Eseguire una ricerca, passando la query di ricerca e altri parametri..

    's' => $s,                              // la query di ricerca
    'exact' => true                         // ricerca nei titoli / post
    'sentence' => true                      // ricerca per frase

  inStileWeb.com
blog comments powered by Disqus