Устранение неполадок Ajax Постфильтр в WordPress - не отвечает на WP_Query - PullRequest
0 голосов
/ 21 января 2020

Я создал пост-фильтр Ajax для блога. Когда вы нажимаете на категорию, чтобы отфильтровать сообщения ниже, то, что происходит, странно. Введена разметка текущей страницы, а не результаты моих аргументов WP_Query. Таким образом, вы получите страницу, вложенную в себя.

Вот моя панель фильтра постов с начальным запросом, заполняющим div ответа:

enter image description here

Вот форма:

<form action="<?php echo admin_url('admin-ajax.php'); ?>" method="POST" id="filter">
  <label><input type="radio" name="category" value="" checked="checked"><div>All</div></label>
  <!-- Loop Selected Categories -->
  <label><input type="radio" name="category" value="Category_ID"><div>Category Name</div></label>
  <!-- End Loop Selected Categories -->

  <input type="submit" value="Submit">
  <input type="hidden" name="action" value="myfilter">
</form>

Ниже мой JavaScript:

jQuery(document).ready(function($) {
    $('#filter').submit(function(){
        var filter = $('#filter');
        $.ajax({
            url:ajax_object.ajaxurl,
            data:filter.serialize(), // form data
            type:filter.attr('method'), // POST
            success:function(data){
                $('#response').html(data); // insert data
            }
    });
    console.log('form submitted');
        return false;
  });

  $('#filter input[type=radio]').on('change', function() {
    $("#filter").submit();
  });
});

Ниже формы фильтра есть ответный div, который содержит исходные / стандартные результаты запроса:

<div class="post-grid" id="response">
    <?php
       $args = array(
        'posts_per_page' => 5,
        'post_status' => array('publish')
      );
      $query = new WP_Query( $args );

      if( $query->have_posts() ) :
        while( $query->have_posts() ): $query->the_post();
          return get_template_part( 'template-parts/content-card' );
        endwhile;
        wp_reset_postdata();
      else :
        echo 'No posts found';
      endif;
    ?>
  </div>

У меня есть следующий код для запроса выбранной категории в моих функциях. php:


// In my enqueued scripts
wp_enqueue_script( 'post_filter_js', get_template_directory_uri() . '/dist/js/post-filter.min.js', array('jquery'), '', true );
wp_localize_script( 'post_filter_js', 'ajax_object', array( 'ajax_url' => admin_url( 'admin-ajax.php' ) ) );


// Function to query the selected category
add_action('wp_ajax_myfilter', 'filter_post_by_cat');
add_action('wp_ajax_nopriv_myfilter', 'filter_post_by_cat');

function filter_post_by_cat(){  
    // for taxonomies / categories
    if( isset( $_POST['category'] ) ):
        $args = array(
            'category__in' => $_POST['category'], 
            'posts_per_page' => 5,
            'post_status' => array('publish')
        );
    endif;

    $query = new WP_Query( $args );

    if( $query->have_posts() ) :
        while( $query->have_posts() ): $query->the_post();
            echo get_template_part( 'template-parts/content-card' );
        endwhile;
        wp_reset_postdata();
    else :
        echo 'No posts found';
    endif;

    die();
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...