WordPress AJAX admin-ajax.php Pagination


WordPress AJAX admin-ajax.php Pagination

我在墙上。我正在使用ajax更新我的搜索结果,如下所示:

function ajax_search_enqueues() {
if ( is_search() ) {
    wp_enqueue_script( 'ajax-search', get_stylesheet_directory_uri() . '/js/custom/ajax-search.js', array( 'jquery' ), '1.0.0', true );
    wp_localize_script( 'ajax-search', 'myAjax', array( 'ajaxurl' => admin_url( 'admin-ajax.php' ) ) );
}
}
add_action( 'wp_enqueue_scripts', 'ajax_search_enqueues' );

我用这个

触发一个输入改变的ajax调用
jQuery('input[type="checkbox"]').on( 'change', function() {
    var cat = jQuery(this).attr('name');
    if (this.checked) {
        cats.push(cat);
    } else {
        cats.splice(cats.indexOf(cat), 1);
    }
    jQuery.ajax({
        type: 'GET',
        url: myAjax.ajaxurl,
        data: {
            action: 'load_search_results',
            categories: cats,
            s: s
        },
        success: function( data ) {
            jQuery( ".content").empty().append( data );
            console.log(data);
        }
    });
} );
add_action( 'wp_ajax_load_search_results', 'load_search_results' );

add_action('wp_ajax_nopriv_load_search_results', 'load_search_results');Add_action ('genesis_after_content', 'breed_posts_nav');

并像这样调用函数

function load_search_results() {
get_template_part( 'loop', 'grid' );
$args = array(
    'post_type' => 'post',
    's' => $_GET['s'],
    'category__in' =>$_GET['categories'],
    'posts_per_page' => 12,
);
// doing loop stuff 
die();
}

除了分页之外,我正在正确检索所有信息。分页中断的原因是我按类别进行过滤。在左边我有类别复选框当一个复选框被改变时它会触发ajax请求。我可以得到分页更新,但当点击页码的url是指向http://dev:8888/wp-admin/admin-ajax.php?action=load_search_results/blah/blah/blah这打破了页面,不再是在搜索。php页面。是否有一种使用ajax来使用分页的方法?任何帮助都会很感激。

filter.js
---------
$('#post-category').change(function(){
        category = $(this).find('.selected').text();
        postType = $('#search-form-type').val();
        post_filter();
    });

function post_filter(paged){
        $.ajax(
            {
                url:ajaxUrl,
                type:"POST",
                data: {action:"get_post_category","category":category,'search':search, 'postType':postType, 'paged': paged},
                success: function(response) {
                $('#blog-post-cover').html(response);
            }
        });
    }
    $('#blog-wrapper').on('click','#pagination a',function(e){
        e.preventDefault();     
        if ($(this).hasClass('prev')||$(this).hasClass('next')) {
            paginateNum = $(this).find('.prev-next').data('attr');
            post_filter(paginateNum);
        }
        else{
            paginateNum = $(this).text();
            post_filter(paginateNum);
        }
        $("html, body").animate({ scrollTop: 0 }, "slow");
    });
    postType = $('#search-form-type').val();
    post_filter(1);
function.php
------------
/*  ==========================================================================
     Blog filter
    ========================================================================== */
    add_action( 'wp_ajax_nopriv_get_post_category', 'post_category' );
    add_action( 'wp_ajax_get_post_category', 'post_category' );   
    function post_category() {
        $post_type = $_POST['postType'];      
        $category = $_POST['category'];
        $search = $_POST['search'];
        $paged = ($_POST['paged'])? $_POST['paged'] : 1;
        if($post_type==="resource-center"):
            $taxonomy ="resource-center-taxonomy";
        else:
            $taxonomy ="category";
        endif;
        if($category):
            $args = array(
                'post_type'         => $post_type,
                'post_status'       => 'publish',
                'tax_query' => array(
                    array(
                        'taxonomy' => $taxonomy,
                        'field'    => 'slug',
                        'terms'    => $category,
                    ),
                ),
                'posts_per_page'    => 5,
                'order'             => 'ASC',
                's'                 => $search,
                'paged'             => $paged
            );
        else:
            $args = array(
                'post_type'         => $post_type,
                'post_status'       => 'publish',
                'posts_per_page'    => 5,
                'order'             => 'ASC',
                's'                 => $search,
                'paged'             => $paged
            );
        endif;
        $posts = new WP_Query($args);?>
        <?php if ( $posts->have_posts() ) :?>
            <?php while ($posts->have_posts()) : $posts->the_post(); ?>
        <?php echo $post->post_title; ?>
            <?php endwhile;?>
            <?php
                $nextpage = $paged+1;
                $prevouspage = $paged-1;
                $total = $posts->max_num_pages;
                $pagination_args = array(
                'base'               => '%_%',
                'format'             => '?paged=%#%',
                'total'              => $total,
                'current'            => $paged,
                'show_all'           => false,
                'end_size'           => 1,
                'mid_size'           => 2,
                'prev_next'          => true,
                'prev_text'       => __('<span class="prev-next" data-attr="'.$prevouspage.'">&laquo;</span>'),
                'next_text'       => __('<span class="prev-next" data-attr="'.$nextpage.'">&raquo;</span>'),
                'type'               => 'plain',
                'add_args'           => false,
                'add_fragment'       => '',
                'before_page_number' => '',
                'after_page_number'  => ''
            );
            $paginate_links = paginate_links($pagination_args);
            if ($paginate_links) {
                echo "<div id='pagination' class='pagination'>";
                echo $paginate_links;
                echo "</div>";
            }?>
            <?php wp_reset_query();  ?>
        <?php else:?>           
           <div class="no-post-cover">
                <div class="container">         
                   <h1 class="has-no-post-list">Posts Not Found</h1>
                </div>
            </div>
       <?php endif;?>         
       <?php die(1);
    }