Paginare WordPress AJAX cu query_posts

7 nov. 2013, 12:22:11
Vizualizări: 14K
Voturi: 5

Am o listă de checkbox-uri pentru categorii, care atunci când sunt bifate, folosesc admin-ajax.php din WordPress pentru a filtra postările în funcție de categoria selectată.

Totul funcționează perfect, dar am probleme în a obține paginarea actualizată. Folosesc query_posts astfel:

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

$args= array
(
 'post_type'=>'course', // tipul postării
    'paged'=>$paged, // pagina curentă
    'posts_per_page'=>3, // postări pe pagină
  'tax_query' => array( // interogare taxonomie
     array(
    'taxonomy' => 'subject', // taxonomia
    'field' => 'slug', // câmpul
    'terms' => $tags_from_group // termenii
    )
    )

);

$posts=query_posts( $args); // execută interogarea

Apoi returnez postările ($posts) ca date, dar nu știu cum să accesez paginarea actualizată..

Mă gândeam la ceva de genul:

 $pagedposts=array();
 $pagedposts['posts']=$posts; // postările
 $pagedposts['pagination']=??? // paginarea

Astfel încât $pagedposts['pagination'] să conțină datele necesare pentru actualizarea paginării după ce apelul AJAX reușește..

Am găsit pe cineva care a avut aceeași problemă aici, dar nu există nicio soluție acolo...

0
Toate răspunsurile la întrebare 1
0

La final am aflat că nu este posibil să actualizezi paginarea. Modul în care am încărcat următoarea serie de articole a fost prin setarea unui offset al articolelor și folosind un buton de încărcare a mai multor articole.

Deci, în apelul tău AJAX unde încarci mai multe articole, trebuie să transmiți o valoare de offset:

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

Deoarece această valoare de offset se va schimba mereu, trebuie să stochezi valoarea într-o variabilă. Mai sus, am folosit 'postoffset'.

Modul în care trebuie să determini valoarea offset-ului este simplu. Poți folosi jQuery pentru a număra câte articole sunt deja afișate pe pagină:

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

Unde .hentry este numele clasei mele pentru articole.

Odată ce primești offset-ul articolelor în scriptul tău PHP, îl poți seta astfel:

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

și apoi să-l folosești în query_args (pe lângă determinarea offset-ului de mai sus, am adăugat o opțiune 'posts_per_page' care îmi permite să văd clar cele 9 articole încărcate în plus și offset-ul meu de articole crescând cu 9 de fiecare dată):

$posts=query_posts( $args);

Pentru a configura butonul de încărcare a mai multor articole în loc să folosești paginarea, poți pur și simplu să pui un div sau o imagine pe pagină și să-i dai un ID - de exemplu:

<div id="load-more">ÎNCĂRCĂ MAI MULTE </div>

și jQuery:

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

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

  //apelează funcția AJAX originală pentru a încărca mai multe articole, cu noul offset:
  load_more_posts($,postoffset);
 });  
}
11 dec. 2013 00:36:25