Я новичок в WordPress и близок к тому, чтобы получить то, что мне нужно, но не знаю, как это сделать.
Первоначально у нас была страница, которая загружала пользовательский тип записи и имела нумерацию страниц. Достаточно просто. Клиент запросил, что он хотел бы отфильтровать результаты сейчас. Я получил это работает, но проблема в том, что нумерация страниц не обновляется с результатами, и я не уверен, как это сделать.
Мой код выглядит следующим образом.
Я попытался поместить нумерацию страниц в ответном div, но это только устраняло его, даже если результаты должны быть разбиты на страницы. Я думал, что будет работать только постраничный переход внутри функции фильтра, но он даже не перемещает нумерацию страниц в свой собственный div. Я переключился с использования POST на GET.
Все работает, кроме обновления нумерации страниц. Например, при загрузке всего 4 страницы. Если я выберу вариант фильтра из выбранного, он будет фильтроваться правильно, но нумерация страниц по-прежнему будет отображать 4 страницы, даже если есть только 4 результата.
Сейчас у меня есть функция, которая является основным запросом, который выполняется при загрузке страницы. Затем у меня есть форма выбора, которая использует GET для фильтрации результатов по полю ACF. Тогда у меня есть div ниже этого ответного div, который содержит нумерацию страниц.
//Function that runs the base query on page load to show initial content
function teacher_query( $posts_per_page = 20 ) {
$paged = ( get_query_var( 'paged' ) ) ? get_query_var( 'paged' ) : 1;
$args = array(
'posts_per_page' => $posts_per_page,
'post_type' => 'staff_bio',
'order' => 'ASC',
'paged' => $paged
);
return new WP_Query( $args );
}
// Filter function that filters based on the ACF field
function filter_function(){
$paged = ( get_query_var( 'paged' ) ) ? get_query_var( 'paged' ) : 1;
$args = array(
'posts_per_page' => 10,
'post_type' => 'staff_bio',
'order' => 'ASC',
'paged' => $paged,
'meta_key' => 'school',
'meta_value' => $_GET['categoryfilter'],
);
$query = new WP_Query( $args );
if( $query->have_posts() ) :
while( $query->have_posts() ): $query->the_post();
require get_template_directory() . '/template-parts/teacher-tile.php';
endwhile;
wp_reset_postdata();
else :
echo 'No posts found';
endif;
die();
}
add_action('wp_ajax_myfilter', 'filter_function');
add_action('wp_ajax_nopriv_myfilter', 'filter_function');
// Script
$('#filter').submit(function(){
var filter = $('#filter');
$.ajax({
url:filter.attr('action'),
data:filter.serialize(), // form data
type:filter.attr('method'), // POST
beforeSend:function(xhr){
filter.find('button').text('Processing...'); // changing the button label
},
success:function(data){
filter.find('button').text('Apply filter'); // changing the button label back
$('#response').html(data); // insert data
}
});
return false;
});
//Pagination
<div class="pagination">
<?php
echo paginate_links( array(
'base' => str_replace( 999999999, '%#%', esc_url( get_pagenum_link( 999999999 ) ) ),
'total' => $query->max_num_pages,
'current' => max( 1, get_query_var( 'paged' ) ),
'format' => '?paged=%#%',
'show_all' => false,
'type' => 'plain',
'end_size' => 2,
'mid_size' => 1,
'prev_next' => true,
'prev_text' => sprintf( '<i></i> %1$s', __( 'Previous', 'text-domain' ) ),
'next_text' => sprintf( '%1$s <i></i>', __( 'Next', 'text-domain' ) ),
'add_args' => false,
'add_fragment' => '',
) );
?>
</div>
Мои ожидаемые результаты состоят в том, что когда пользователь фильтрует обновления пагинации на основе возвращенных результатов, а не остается на том же номере, что и при выполнении исходного запроса.