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.