2013-01-31 15 views
6

मैं अपने वर्डप्रेस श्रेणियों पृष्ठ है, जहाँ अगर वे ग्राफिक पर क्लिक करें, फिर अधिक पदों लोड किए गए हैं पर कुछ कोड है - इस मामले में 15Wordpress/PHP/अजाक्स लोड अधिक पोस्ट

यह पहली बार अच्छा काम करता है कि यह दबाया जाता है। हालांकि, इसे फिर से दबाए जाने के बाद, यह अगले पदों (यानी तीसरा) नहीं लाता है, लेकिन दूसरे में लाता है।

मैं समझता हूं कि समस्या ऑफसेट है - यानी। जहां यह शुरू होता है। तो, पहली बार इसे दबाया जाता है, ऑफसेट 16 होना चाहिए, दूसरी बार 31, तीसरी बार 46 आदि

हालांकि, जहां मुझे कठिनाई हो रही है, इस ऑफसेट से गुज़र रही है। ,

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; 
} 

मैं एक सत्र ऑफसेट के लिए मूल्य पकड़े बनाने के लिए एक विचार था, हालांकि कि काम करने के लिए नहीं लगता था:

$('#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); 
    }); 


}); 

यह PHP है:

इस js है । इसके अलावा, मुझे यकीन नहीं है कि अगर कोई उस श्रेणी पृष्ठ पर लौटता है तो मैं इसे कैसे हटा दूंगा।

कोड मैं का इस्तेमाल किया यह था:

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']; 
} 

मैं डाल कि php समारोह की शुरुआत में। अगर पहले से ही कोई सत्र था तो यह 15 के अतिरिक्त पंजीकरण को प्रतीत नहीं होता था।

+0

क्या मूल्य रिटर्न चेतावनी (ऑफसेट); var offset = $ ('। article') के बाद सही कहा जाता है। आकार(); ? पहले, दूसरा और तीसरा पुनरावृत्ति, ज़ाहिर है। –

+0

@ david.binda हमेशा 16 – user2029763

+0

आपके यहां एक त्रुटि है: var offset = $ ('। Article')। आकार(); मैं मानता हूं कि नई पोस्ट में डार्टिकल क्लास सेट नहीं है। –

उत्तर

2

ऑफ़सेट का उपयोग करने के बजाय, आप posts_per_page और paged 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' 
      ) 
     ) 
    ); 

//... 
} 

और अपने जे एस में:

//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

धन्यवाद। हालांकि, जब मैं बटन पर क्लिक करता हूं तो वर्तमान में कुछ भी नहीं हो रहा है। मुझे एक संदेश मिल रहा है: "अनकॉट सिंटेक्स त्रुटि: अप्रत्याशित पहचानकर्ता" लाइन के लिए: $। पोस्ट (AJAXURL, {action: 'load_more_posts', post_type: post_type, parent: parent, ऑफसेट: $ ऑफ़सेट, पृष्ठ = पृष्ठ ++} , फ़ंक्शन (डेटा) { – user2029763

+0

यह एक जावास्क्रिप्ट त्रुटि है: –

+0

संपादित करें अब जब भी मैं इसे दबाता हूं, यह केवल उसी पोस्ट को दिखाता है जो नई पोस्ट दिखाने के बजाय पहले से मौजूद हैं। – user2029763

संबंधित मुद्दे