У меня есть фильтр сообщений, который работает. Также я сделал разбивку на страницы для сообщений, но если я хочу фильтровать сообщения только на текущей странице, мой код больше не работает.
Так что у меня есть разбиение на страницы, и если я фильтрую сообщения на странице 1, тогда фильтруйте все сообщения со всех страниц.
Например, у меня есть сообщение 1 и сообщение 2 на первой странице и сообщение 3 на второй странице.
Если условия условия фильтра подходят для сообщений 1 и 3, мне нужно увидеть только сообщение 1, потому что я на первой странице, а пост 3 - на второй странице. Теперь он показывает сообщение 1 и сообщение 3, даже если я на первой странице.
Возможно, какие-либо предложения, как справиться с этим?Сообщения с фильтром WordPress с использованием ajax на определенной странице
index.php Код:
<?php wp_dropdown_categories('show_option_none=Select category&show_option_all=&name=cat1');
?>
<?php wp_dropdown_categories('show_option_none=Select category&show_count=0&orderby=name&echo=1&taxonomy=initiative&name=cat2');
?>
<?php
$paged = (get_query_var('paged')) ? absint(get_query_var('paged')) : 1;
$args = array(
'post_status' => 'publish',
'paged' => $paged
);
$posts = new WP_Query($args);
if ($posts->have_posts()) :
?>
<?php while($posts->have_posts()) : $posts->the_post() ?>
<?php get_template_part('content'); ?>
<?php endwhile; ?>
<?php else : ?>
<?php get_template_part('content','none'); ?>
<?php endif; ?>
<?php $big = 999999999; // need an unlikely integer
echo paginate_links(array(
'base' => str_replace($big, '%#%', esc_url(get_pagenum_link($big))),
'format' => '?paged=%#%',
'current' => max(1, get_query_var('paged')),
'total' => $posts->max_num_pages
));
?>
<?php
wp_reset_postdata();
?>
JS код:
var ajaxurl = '<?php echo admin_url('admin-ajax.php'); ?>';
var currentPage = <?php echo $paged; ?> ;
(function($) {
$(document).ready(function(){
$('form.posts-filter select').change(function(){
$.ajax({
type:"POST",
url: ajaxurl,
data:$('form.posts-filter').serialize()+'&paged='+currentPage+'&action=filter_posts', //only input
success: function(response){
$("#main-content .container").html(response);
},
beforeSend: function(){
$('.loader').show(),
$('.loader-fade').show()
},
complete: function(){
$('.loader').hide(),
$('.loader-fade').hide()
}
});
});
});
})(jQuery);
functions.php код:
add_action('wp_ajax_filter_posts', 'filter_my_posts');
add_action('wp_ajax_nopriv_filter_posts', 'filter_my_posts');
function filter_my_posts(){
$filterId = $_POST['cat1'];
$filterId2 = $_POST['cat2'];
$relation = '';
if (($filterId == '-1') || ($filterId2 == '-1')){
$relation = 'OR';
} else {
$relation = 'AND';
}
if (isset($_POST['paged'])) {
$page = $_POST['paged'];
} else {
$page = 1;
}
$args = array(
'post_type' => 'post',
'paged' => $page,
'tax_query' => array(
'relation' => $relation,
array(
'taxonomy' => 'category',
'field' => 'term_id',
'terms' => $filterId
),
array(
'taxonomy' => 'initiative',
'field' => 'term_id',
'terms' => $filterId2
)
)
);
if (($filterId == "-1") && ($filterId2 == "-1")){
unset($args['tax_query']);
}
$posts = query_posts($args);
if(have_posts()){
while(have_posts()){ the_post();
get_template_part('content');
}
}
wp_reset_postdata();
die();
};
Это работает, но не так, как мне нужно. WP по-прежнему возвращает все сообщения, для которых требуется условие фильтра, но WP не понимает, что я хочу фильтровать только текущие сообщения по страницам e.x. на странице 1 мне нужно отфильтровать сообщения только со страницы 1, но WP занимает сообщения со всех страниц и возвращает их. –