Как обновить нумерацию страниц по пользовательскому wp-запросу после применения фильтра ajax? - PullRequest
0 голосов
/ 15 января 2019

Я новичок в 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>

Мои ожидаемые результаты состоят в том, что когда пользователь фильтрует обновления пагинации на основе возвращенных результатов, а не остается на том же номере, что и при выполнении исходного запроса.

...