2013-01-31 13 views
6

ho qualche codice sulla mia pagina categorie wordpress, in cui, se si clicca sul grafico, poi gli altri messaggi sono caricati - in questo caso 15.Wordpress/PHP/Ajax carico altri messaggi

E le grandi opere per la prima volta che è premuto. Tuttavia, una volta premuto nuovamente, non introduce il prossimo gruppo di post (cioè il terzo), ma introduce il secondo.

Capisco che il problema è l'offset - vale a dire. da dove inizia Quindi, la prima volta che viene premuto, l'offset deve essere 16, la seconda volta 31, la terza volta 46 ecc.

Tuttavia, dove sto avendo difficoltà, sta passando attraverso questo offset.

Questo è il JS:

$('#do-show-more-posts').live('click', function(){ 


    if($(this).data("o-set")){ 
     $offset=$(this).data("o-set"); 
    }else 
    { 
     $offset=16 ; //assume this is 16 initially 
    } 

    var post_type = $(this).attr('post-type'); 
    var parent = $(this).attr('parent-id'); 
    var offset = $('.article').size(); 

    $(this).fadeTo(0,0); 
    $('.load-more-posts-wrapper .loader').addClass('show'); 

    $.post(ajaxurl, { action: 'load_more_posts', post_type : post_type, parent : parent, offset : offset }, function(data){ 
     $load_more = $('.load-more-posts-wrapper'); 
     $load_more.find('.loader').removeClass('show'); 
     $load_more.find('.link').removeAttr('style'); 
     var load_more_button = '<div class="load-more-posts-wrapper">' + $load_more.html() + '</div>'; 
     $load_more.remove(); 

     if(data == '' || data == 'udefined' || data == 'No More Posts' || data == 'No $args array created'){ 
      data = ''; 
      load_more_button = '<div class="load-more-posts-wrapper">There are no more posts.</div>'; 
      setTimeout("$('.load-more-posts-wrapper').fadeTo(1800,0)", 8000); 
     } 

     $('#content').append(data); 
     $('#content').append(load_more_button); 
     $(this).data("o-set",$offset); 
    }); 


}); 

Questo è il PHP:

function load_more_posts() { 




if(isset($_POST['post_type']) && $_POST['post_type'] == 'publication'){ 

    $args = array(
     'offset'   => $_POST['offset'], 
     'orderby'  => 'post_date', 
     'order'   => 'DESC', 
     'post_type'  => 'article', 
     'post_status' => 'publish', 
     'meta_query'  => array(
      array(
       'key' => 'related-publication', 
       'value' => $_POST['parent'], 
       'meta_compare' => 'IN' 
      ) 
     ) 
    ); 

} else if(isset($_POST['post_type']) && $_POST['post_type'] == 'category') { 

    $args = array(
     'cat'  => $_POST['parent'], 
     'offset' => $_POST['offset'], 
     'post_type' => array('post','article','publication') 
    ); 

} else { 

    // print_r($args); 

} 

$Query = new WP_Query($args); 
//print_r($Query); 
if ($Query->have_posts()) { 

    while ($Query->have_posts()) { 
     $Query->the_post(); 
     get_template_part('loop', 'xxxry'); 
    } 

} else { 
    // print_r($args); 
} 

exit; 
} 

ho avuto l'idea di creare una sessione tenendo il valore di offset, anche se questo non sembra funzionare . Inoltre, non sono sicuro di come lo eliminerei nel caso qualcuno ritorni alla pagina di quella categoria.

Il codice che ho usato è stato questo:

if (isset($_SESSION['posts_start'])){ 
    $_POST['offset']=$_SESSION['posts_start']+15; 
    $_SESSION['posts_start']=$_POST['offset']; 
} else { 
    $_POST['offset']=15; 
    $_SESSION['posts_start']=$_POST['offset']; 
} 

ho messo che all'inizio della funzione php. Non sembrava registrare l'aggiunta di 15 se c'era già una sessione.

+0

Che valore ritorna alert (offset); chiamato subito dopo var offset = $ ('. article'). size(); ? Dopo prima, seconda e terza iterazione, ovviamente. –

+0

@ david.binda sempre 16 – user2029763

+0

di quanto si abbia un errore qui: var offset = $ ('. Article'). Size() ;. Suppongo che il nuovo post non abbia un set di classi .article. –

risposta

2

Invece di utilizzare l'offset, è possibile utilizzare i parametri posts_per_page e paged degli argomenti di WP_Query.

function load_more_posts() { 

//... 

    $args = array(
     'posts_per_page' => $_POST['offset'], 
     'paged'   => $_POST['page'], 
     'orderby'  => 'post_date', 
     'order'   => 'DESC', 
     'post_type'  => 'article', 
     'post_status' => 'publish', 
     'meta_query'  => array(
      array(
       'key' => 'related-publication', 
       'value' => $_POST['parent'], 
       'meta_compare' => 'IN' 
      ) 
     ) 
    ); 

//... 
} 

e nel tuo JS:

//EDIT2: (global page variable 
$(document).ready(function(){ 
//... 
var page = 1; //don't redefine this variable each time you click. 
$('#do-show-more-posts').live('click', function(){ 
    //... 
    $.post(ajaxurl, { action: 'load_more_posts', post_type : post_type, parent : parent, offset : $offset, page : page++ }, function(data){ 
    //EDIT: ---------------------------------------------------------------------------------------------------^
     $load_more = $('.load-more-posts-wrapper'); 
     $load_more.find('.loader').removeClass('show'); 
     $load_more.find('.link').removeAttr('style'); 
     var load_more_button = '<div class="load-more-posts-wrapper">' + $load_more.html() + '</div>'; 
     $load_more.remove(); 

    if(data == '' || data == 'udefined' || data == 'No More Posts' || data == 'No $args array created'){ 
     data = ''; 
     load_more_button = '<div class="load-more-posts-wrapper">There are no more posts.</div>'; 
     setTimeout("$('.load-more-posts-wrapper').fadeTo(1800,0)", 8000); 
    } 

    $('#content').append(data); 
    $('#content').append(load_more_button); 
    $(this).data("o-set",$offset); 
    }); 
} 
//... 
} 
+0

Grazie. Tuttavia, nulla sta accadendo attualmente quando clicco sul pulsante. Ricevo un messaggio: "Uncaught SyntaxError: identificatore imprevisto" Per la riga: $ .post (ajaxurl, {action: 'load_more_posts', post_type: post_type, parent: parent, offset: $ offset, pagina = pagina ++} , funzione (dati) { – user2029763

+0

Questo è un errore javascript: Vedi modifica –

+0

Ora ogni volta che lo premo, mostra solo gli stessi post che sono già lì invece di mostrare nuovi post. – user2029763

Problemi correlati