Paginazione AJAX in WordPress con query_posts

7 nov 2013, 12:22:11
Visualizzazioni: 14K
Voti: 5

Ho una lista di checkbox per le categorie che, quando selezionate, utilizzano admin-ajax.php di WordPress per filtrare i post in base alla categoria scelta.

Tutto funziona correttamente, ma sto avendo difficoltà a ottenere la paginazione aggiornata. Sto usando query_posts nel seguente modo:

$paged = (get_query_var('paged')) ? get_query_var('paged') : 1;

$args= array
(
 'post_type'=>'course',
    'paged'=>$paged,
    'posts_per_page'=>3,
  'tax_query' => array(
     array(
    'taxonomy' => 'subject',
    'field' => 'slug',
    'terms' => $tags_from_group
    )
    )

);

$posts=query_posts( $args);

Poi restituisco i $posts come dati, ma non so come accedere alla paginazione aggiornata...

Stavo pensando a qualcosa del genere:

 $pagedposts=array();
 $pagedposts['posts']=$posts;
 $pagedposts['pagination']=???

In modo che $pagedposts['pagination'] contenga i dati necessari per aggiornare la paginazione dopo che la chiamata AJAX è andata a buon fine...

Ho trovato qualcun altro con lo stesso problema qui, ma non c'è una soluzione...

0
Tutte le risposte alla domanda 1
0

Alla fine ho scoperto che non è possibile aggiornare la paginazione. Il modo in cui ho caricato il prossimo gruppo di post è stato impostando un offset dei post e utilizzando un pulsante "carica più".

Quindi nella tua chiamata ajax dove carichi più post, devi passare un valore di offset:

$.ajax({
     url: '/wp-admin/admin-ajax.php', 
     type: "POST",
     data: {
            'action': 'filter_posts',
            'selected_options':selected_options,
            'offset':postoffset
       }//etc...

Poiché questo valore di offset cambierà sempre, devi memorizzarlo in una variabile. Sopra, ho usato 'postoffset'.

Il modo per determinare il valore dell'offset è semplice. Puoi semplicemente usare jQuery per contare quanti post sono attualmente sulla pagina:

    var postoffset = $('.hentry').length;

Dove .hentry è il nome della classe dei miei post.

Una volta che ricevi l'offset dei post nel tuo script PHP, puoi impostarlo così:

 $args= array
    (
        'offset'=>$offset,
        'post_type'=>$post_type,
        'paged'=>$paged,
        'posts_per_page'=>9,
        'orderby' => 'title',
        'order' => 'ASC'
    );

e poi inserirlo nei tuoi query_args (oltre a determinare l'offset sopra, ho aggiunto un'opzione 'posts_per_page' che mi permette di vedere chiaramente i 9 post extra caricati e il mio offset dei post aumentare di 9 ogni volta):

$posts=query_posts( $args);

Per configurare il tuo pulsante "carica più" invece di usare la paginazione, puoi semplicemente mettere un div o un'immagine sulla tua pagina e assegnargli un ID - per esempio:

<div id="load-more">CARICA PIÙ </div>

e il codice jQuery:

function load_more_button_listener($){
 $('#load-more').click(function(event){
       event.preventDefault();
        var postoffset = $('.hentry').length;

 // console.log("offset: "+postoffset);

  //chiama la funzione ajax originale per caricare più post, con il nuovo offset:
  load_more_posts($,postoffset);
 });  
}
11 dic 2013 00:36:25