Sede Legale
via Sorrento 11, 00177 Roma (RM)
contact@evermind.it
Tel: +39 327.833.37.60

Sede Operativa
via Giulia 1/C, 89125 Reggio Calabria (RC)
contact@evermind.it
Tel: +39 0965.16.40.041

Back

wordpress custom post type wp_query: lettura dei dati

Sempre più spesso facciamo uso dei custom post type per poter realizzare siti web sempre più evoluti in wordpress.

Abbiamo già visto in passato cosa sia e come si possa creare un custom post type.

Vediamo adesso cosa dobbiamo fare per poter creare il nostro template in wordpress, estraendo i custom post type:

$lista = new WP_Query(
    array('post_type' => 'your-custom-post-type',
    'posts_per_page' => -1,
    'tax_query' => array(
        array(
            'taxonomy' => 'your-taxonomy',
            'field' => 'slug',
            'terms' => $term
        )
    ),
    'orderby' => 'title',
    'order' => 'DESC')
);

La nuova versione di WP_Query consente di filtrare i dati di tipo “custom post type”, grazie al parametro tax_query. Ecco cosa si dice la documentazione a riguardo:

Show posts associated with certain taxonomy.

  • {tax} (string) – use taxonomy slug. Deprecated as of Version 3.1 in favor of ‘tax_query‘.
  • tax_query (array) – use taxonomy parameters (available with Version 3.1).
  • taxonomy (string) – Taxonomy.
  • field (string) – Select taxonomy term by (‘id’ or ‘slug’)
  • terms (int/string/array) – Taxonomy term(s).
  • include_children (boolean) – Whether or not to include children for hierarchical taxonomies. Defaults to true.
  • operator (string) – Operator to test. Possible values are ‘IN’, ‘NOT IN’, ‘AND’.

Vediamo ora di rendere tutto più interessante.

Specifica: dobbiamo realizzare un cartellone di spettacoli per un sito web per teatri, ed il cliente ci chiede di raggruppare gli spettacoli in base al mese, ordinandoli da gennaio a dicembre all’interno dell’anno. Come possiamo estrarre questi dati?

Dobbiamo far ricorso alla query di base evidenziata in precedenza, filtrando per i meta_value delle date spettacolo:

$loop = new WP_Query(array('post_type' => 'spettacolo',
	'posts_per_page' => -1,
	'meta_query' => array(
		array(
			'value' => array($dataDa, $dataA),
			'type' => 'DATE',
			'compare' => 'BETWEEN'
		)
	),
	'meta_key' => 'data_da',
	'orderby' => 'meta_value',
	'order' => 'ASC')
);

Possiamo notare un paio di elementi interessanti in questa query:

  1. abbiamo applicato il filtro SQL BETWEEN per estrarre i custom post type ‘spettacolo’ che abbiano una data spettacolo compresa tra “dataDa” e “dataA”;
  2. abbiamo imposto l’ordinamento per un meta_value “dataDa”, di modo da ordinare i risultati sulla base della prima data dello spettacolo

 

Francesco Biacca
Francesco Biacca
https://www.evermind.it/team/francesco-biacca/