💻 آخرین فرصت یادگیری برنامه‌نویسی با آفر ویژه قبل از افزایش قیمت در ۵ آذر ماه (🎁 به همراه یک هدیه ارزشمند )
۰ ثانیه
۰ دقیقه
۰ ساعت
۰ رضا زمانی
پیاده سازی load more به روش ساده تر
جامعه وردپرس (برنامه نویسی) ایجاد شده در ۰۴ آبان ۱۴۰۳

سلام.استاد این موارد رو خیلی پیچیده کردن.خیلی ساده میتوان وقتی روی دکمه "فیلتر کردن" کلیک میشه یک فیلد آپشن که مقدار args$ کوئری را می‌گیرد در جدول آپشن‌ها ذخیره کنید.بعنوان مثال

function lu_filter_content_ajax() // ایجکس کلیک روی دکمه فیلتر
{
    $args = [ // حالت دیفالت
        'post_type' => ['post' , 'tech'],
        'posts_per_page' => 3, 
        'paged' => 1  
    ];
    $the_query= new WP_Query($args);
     update_option('lu_filter_ajax_args'  , $args);
    output_html2($the_query); // خروجی html
 }

سپس یک تابع مجزا برای دکمه load more تعریف کنید که وقتی روی دکمه "مطالب بیشتر" کلیک میشود اجرا میشود و تنها شماره صفحه را بگیرد و paged در آرایه arg$ آپدیت کند

function lu_filter_content_ajax_load_more(){
     $args = get_option('lu_filter_ajax_args');
       $args['paged'] = $_POST['page_num']; //  از ایجکس می‌اید و شماره صفحه را بروز می‌کند
       $the_query= new WP_Query($args);
      output_html2($the_query);
}

برای ریست کردن شمارنده صفحه در هنگام فیلتر کردن، در فایل ajax-front.js، متغیر current_page را بصورت گلوبال تعریف کنید.این متغیر درون متد submit فرم با هر بار کلیک روی دکمه "فیلتر کردن" ریست می‌شود 

jQuery(document).ready(function ($) {
    let current_page = 1 // صفحه شماره
    $('#archive-filter').on('submit', function (e) { // دکمه فیلتر کردن
        e.preventDefault();
        current_page = 1; // ریست کردن صفحه شمار
        // codes Ajax
    })
    $('#load-more').on('click', function () { // دکمه لود مور
        current_page++; // شماره صفحه با هر بار کلیک اضافه میشود
        $.ajax({
            url: ajaxFront.ajaxurl,
            method: 'POST',
            dataType: 'json',
            data: {
                action: 'lu_filter_content_ajax_load_more',
                page_num: current_page, // ارسال شماره صفحه
                nonce: ajaxFront.front_nonce,
            },
            success: function(response) {
                if(response.success){
                    if(response.content !=null) {
                        if(current_page >= response.max_page){
                            $('.load-more-pagination').hide(); // پنهان کردن دکمه مطالب بیشتر
                        }
                    }
                }
            },
        })
    })
})