سلام.استاد این موارد رو خیلی پیچیده کردن.خیلی ساده میتوان وقتی روی دکمه "فیلتر کردن" کلیک میشه یک فیلد آپشن که مقدار 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(); // پنهان کردن دکمه مطالب بیشتر
}
}
}
},
})
})
})