Why not showing all post by default in my jquery filter

Hello Expert Developer, Can you please take a look on it, What i did messed up?

function mysite_filter_function(){

//groups checkboxes
if( $groups = get_terms( array( 'taxonomy' = 'category' ) ) ) :
$groups_terms = array();

foreach( $groups as $group ) {
    if( isset( $_POST['group_' . $group-term_id ] )  $_POST['group_' . $group-term_id] == 'on' )
         $groups_terms[] = $group-slug;
}
endif;



$tax_query = array( 'relation' = 'AND' );

if ( ! empty( $groups_terms ) ) {
    $tax_query[] = array(
        'taxonomy' = 'category',
        'field'    = 'slug',
        'terms'    = $groups_terms,
    );
}



$args = array(
    'orderby' = 'date',
    'post_type' = 'course',
    'posts_per_page' = -1,
    'tax_query'      = $tax_query,
);

$query = new WP_Query( $args );

if( $query-have_posts() ) :
    while( $query-have_posts() ): $query-the_post();
        // echo 'h2' . $query-post-post_title . '/h2';
        // get_template_part( 'customcourse');
        ?
        div class=col-md-4
            a href=?php echo esc_url( post_permalink() ); ?
                div class=course_post_card
                    div class=course_title
                        h2?php the_title(); ?/h2
                    /div
                    div class=course_footer
                        div class=course_footer_location
                            a href=?php echo esc_url( post_permalink() ); ? i class=fa fa-map-marker/i span?php echo get_post_meta(get_the_ID(), 'skips_size', TRUE);?/span /a
                        /div
                        div class=course_footer_date
                            a href=?php echo esc_url( post_permalink() ); ? i class=fa fa-calendar/i span?php echo get_post_meta(get_the_ID(), 'skips_width', TRUE);?/span /a
                        /div
                    /div
                /div
            /a
        /div


        ?php

    endwhile;
    wp_reset_postdata();
else :
    echo 'No posts found';
endif;

die();
}
add_action('wp_ajax_myfilter', 'mysite_filter_function');
add_action('wp_ajax_nopriv_myfilter', 'mysite_filter_function');

and this is my course page

?php
/**
* Template Name: Courses Pages
*
* @package WordPress
* @subpackage Twenty_Fourteen
* @since Twenty Fourteen 1.0
*/

get_header();
//Add AJAX path to use in load-posts.js
$getPath = array('ajaxURL' = admin_url('admin-ajax.php'));

 ?
    
body ?php body_class( 'site-content' ); ?

    div class=container style=padding: 80px 0px;
        div class=row
            div class=col-md-12
                form action=?php echo site_url() ?/wp-admin/admin-ajax.php method=POST id=filter
                    ?php
                    if( $groups = get_terms( array( 'taxonomy' = 'category' ) ) ) :
                      echo 'ul class=groups-list';
                        echo labelinput type='checkbox' name='all' id='all' All/label;

                      foreach( $groups as $group ) :
                         echo 'input type=checkbox class= id=group_' . $group-term_id . ' name=group_' . $group-term_id . ' /label for=group_' . $group-term_id . '' . $group-name . '/label';
                       endforeach;
                       echo '/ul';
                     endif;
                   ?
                   input type=hidden name=action value=myfilter
                /form
            /div
            div class=row all-post
                !-- All the post --
            /div

            

            !-- Load More Button --
            div class=col-md-12 align-self-center text-center
                button class=btn btn-primary id=loadMoreLoad More/button
            /div
        /div
    /div



/body
script

$('#filter').change(function(){
    var filter = $('#filter');
    $.ajax({
        url:filter.attr('action'),
        data:filter.serialize(),
        type:filter.attr('method'),
        beforeSend:function(xhr){
            //filter.find('button').text('Processing...');
        },
        success:function(data){
            //filter.find('button').text('Filter');
            $('.all-post').html(data);
        }
    });
    return false;
});

/script
?php
get_footer();
?

Topic wp-reset-postdata ajax php filters jquery Wordpress

Category Web


@HappyArif You just kept a line in your code that needs to be changed if there is a Category selected.

$args = array(
'orderby' => 'date',
'post_type' => 'course',
'posts_per_page' => -1,
'tax_query'      => $tax_query,
);

This have 'posts_per_page' => -1 which needs to be changed to 'posts_per_page' => 9, 'paged' => $paged to make the categorized ajax call as Paged query.

if ( ! empty( $groups_terms ) ) {
$paged = 2; //This needs to be the Paged Request Number.
$args = array(
  'orderby' => 'date',
  'post_type' => 'course',
  'posts_per_page' => 9,
  'paged' => $paged,
  'tax_query'      => $tax_query
);
}
else
{
$args = array(
  'orderby' => 'date',
  'post_type' => 'course',
  'posts_per_page' => -1,
);
}

About

Geeks Mental is a community that publishes articles and tutorials about Web, Android, Data Science, new techniques and Linux security.