Recentemente mi è capitato di creare un piccolo catalogo prodotti su WordPress. Per farlo ho creato un custom post type “product” e una custom taxonomy “product_types”. Per visualizzare le pagine con i filtri per questa custom taxonomy ho creato un template di pagina ad hoc, chiamandolo taxonomy-{taxonomy}.php, ovvero taxonomy-product_types.php. Fin qui tutto bene, ma come fare se voglio ordinare i prodotti non per data (comportamento di default di wordpress) ma per qualche altro attributo o campo personalizzato? All’interno della nostra pagina taxonomy-product_types.php  abbiamo il classico Loop di wordpress

e la “main query” viene creata automaticamente da WordPress, filtrando i prodotti per il termine della custom taxonomy visualizzata.

Come fare per modificare la main query e cambiare il tipo di ordinamento?

Basta aggiungere alcune righe di codice all’interno del file functions.php del nostro tema. Eccole qui:

In pratica ci agganciamo all’hooks “pre_get_posts“, passandogli una funzione che accetta come parametro la main query stessa. Il parametro viene passato “by reference”, quindi è possibile modificare direttamente la query cambiando, in questo caso, l’ordinamento.

Leave a Reply