Impaginazione del tipo di post personalizzato di WordPress
In generale, ogni volta che lavoro con l’impaginazione del tipo di post personalizzato, lo faccio scrivendo una query personalizzata utilizzando WP_Query e quindi chiamando wp_reset_postdata() alla fine di The Loop.
Penso ancora che questo abbia il suo posto, ma esiste una soluzione più semplice che potresti essere in grado di implementare utilizzando un hook specifico fornito da WordPress.
In particolare, sto parlando dell’hook pre_get_posts. Nel Codice di Riferimento, puoi vedere che questo è definito come:
Si attiva dopo la creazione dell’oggetto variabile di query, ma prima dell’esecuzione della query effettiva.
E poiché la query contiene molte informazioni, possiamo andare avanti e usarla per determinare se vogliamo modificare gli argomenti necessari per gestire l’impaginazione.
Con questo intendo dire che dobbiamo esaminare la proprietà post_type e il valore posts_per_page. Per fare ciò, puoi implementarlo nel modo seguente :
<?php
use WP_Query;
add_action('pre_get_posts', __NAMESPACE__. 'customPostTypePagination');
/**
* If we're on the 'acme-post-type' page, then adjusts pagination so there are only two posts per page. This will
* affect pagination so we can use built-in pagination links to easily page through the content.
*
* @param WP_Query the instance of the query object that contains information to populate the template.
*
* @return WP_Query an unmodified version of the query object or a modified version if we're on the acme post-type.
*/
function customPostTypePagination(WP_Query $query)
{
if (isset($query->query['post_type']) && 'acme-post-type' == $query->query['post_type']) {
$query->set('posts_per_page', 2);
}
}
Il codice sopra non è orientato agli oggetti (se lo fosse, configurerei un abbonato e una classe responsabile della gestione della logica nella funzione), ma puoi vedere come configurarlo nella sua forma più semplice.
Quindi, se stai lavorando con l’impaginazione del tipo di post personalizzato e non vuoi occuparti dei vari aspetti dell’impostazione di una query personalizzata, questo potrebbe risolvere il tuo problema.