WordPress: usare WP_Query in modo pratico

WordPress: usare WP_Query in modo pratico

A proposito della classe di WordPress WP_Query devo ammettere che il suo uso pratico resta per molti un pò oscuro. In breve, questa classe serve a creare un nuovo Loop all'interno di un tema di WordPress. La cosa interessante è che si possono avere tanti Loop quanti ne vogliamo, permettendoci così di mostrare post, pagine, tag e tassonomie nel modo voluto. In questo articolo vorrei soffermarmi sulle query che si possono eseguire con questa classe.

Uso di base

Come detto in precedenza, WP_Query serve a creare nuovi Loop. Ecco il suo uso di base:


$the_query = new WP_Query( $args );

// The Loop
while ( $the_query->have_posts() ) : $the_query->the_post();
	echo '<li>';
	the_title();
	echo '</li>';
endwhile;

wp_reset_postdata();

$args sono i parametri che possono essere passati al costruttore della classe. Li vedremo tra breve.

Query utili

Ecco alcune query che ci possono tornare utili.

Visualizzare i post per autore

Possiamo usare sia l'ID dell'autore che il suo nicename:


$query = new WP_Query( 'author=123' );
$query = new WP_Query( 'author_name=neo' );

Possiamo anche visualizzare i post di più autori:


$query = new WP_Query( 'author=2,6,17,38' );

Si possono anche escludere gli autori usando il prefisso -:


$query = new WP_Query( 'author=-12,-34,-56' );

Visualizzare i post per categoria

Possiamo usare sia l'ID della categoria che il suo slug:


$query = new WP_Query( 'cat=4' );
$query = new WP_Query( 'category_name=css' );

O anche più di una categoria:


$query = new WP_Query( 'cat=2,6,17,38' );
$query = new WP_Query( 'category_name=css,jquery' );

Si possono anche escludere le categorie usando il prefisso -:


$query = new WP_Query( 'cat=-12,-34,-56' );

Si possono mostrare i post che sono sia in una che in un'altra categoria:


$query = new WP_Query( array( 'category__and' => array( 2, 6 ) ) );
$query = new WP_Query( array( 'category__in' => array( 2, 6 ) ) );

O escludere dei post in una data categoria:


$query = new WP_Query( array( 'category__not_in' => array( 2, 6 ) ) );

Visualizzare post e pagine

Possiamo visualizzare un post o una pagina per ID:


$query = new WP_Query( 'p=7' );
$query = new WP_Query( 'page_id=7' );

O per slug:


$query = new WP_Query( 'name=about' );
$query = new WP_Query( 'pagename=contatti' );

Possiamo mostrare le pagine figlie di un'altra pagina usando uno slash come separatore:


$query = new WP_Query( 'pagename=about/contatti' );

Per i post useremo invece un parametro apposito:


$query = new WP_Query( 'post_parent=93' );

Possiamo visualizzare solo alcuni post specificati:


$query = new WP_Query( array( 'post__in' => array( 2, 5, 12, 14, 20 ) ) );

O escluderne alcuni:


$query = new WP_Query( array( 'post__not_in' => array( 2, 5, 12, 14, 20 ) ) );

Possiamo visualizzare n-post per pagina:


$query = new WP_Query( 'posts_per_page=3' );

O tutti i post:


$query = new WP_Query( 'posts_per_page=-1' );

Possiamo disabilitare la paginazione dei post:


$query = new WP_Query( 'nopaging=true' );

O visualizzare solo i post di una specifica pagina nella paginazione:


$query = new WP_Query( 'paged=6' );

O della pagina corrente:


$query = new WP_Query( 'paged=' . get_query_var( 'page' ) );

Possiamo visualizzare i post partendo da un post specifico in poi:


$query = new WP_Query( 'offset=3' ) );
$query = new WP_Query( array( 'posts_per_page' => 5, 'offset' => 1 ) );

La prima query farà partire i post dal quarto post, mentre la seconda dal secondo.

Possiamo ordinare i post per titolo in ordine discendente:


$query = new WP_Query( array ( 'orderby' => 'title', 'order' => 'DESC' ) );

O visualizzare un post casuale:


$query = new WP_Query( array ( 'orderby' => 'rand', 'posts_per_page' => '1' ) );

Possiamo anche visualizzare i post più popolari (per numero di commenti):


$query = new WP_Query( array( 'orderby' => 'comment_count' ) );

Documentazione

Fate riferimento alla documentazione ufficiale di WordPress.

Torna su