Y
Y
Yana Egorova2020-09-23 18:52:34
WordPress
Yana Egorova, 2020-09-23 18:52:34

400 (Bad Request) ajax Wordpress. How to fix?

I'm doing filtering using ajax request. But it gives a 400 (Bad Request) error. Can't figure out why
My js:

(function($) {

$(document).ready(function() {
$(document).on('click', '.js-filter-item > a', function(e) {

e.preventDefault();

  var category = $(this).data('category');


  $.ajax({

  url: wp_ajax.ajax_url,
    data: { action: 'filter', category: category},
    type: 'cases',
    success: function(result) {
      $('.js-filter').html(result);
    },
    error: function(result) {

      console.warn(result);

    }

  });



});


});


})(jQuery);
Function.php
<code lang="php">
<?php
add_action( 'init', 'register_post_types' );
add_theme_support( 'post-thumbnails', array('cases') );
add_action( 'wp_ajax_nopriv_filter', 'filter_ajax' );
add_action( 'wp_ajax_filter', 'filter_ajax' );

function filter_ajax() {

  $category = $_POST['category'];


    $args = array(
  'numberposts' => 0,
  'post_type'   => 'cases',
  'suppress_filters' => true,
) ;


  if(isset($category)) {
    $args['category__in'] = array($category);

  };

    $query = new WP_Query($args);

    if($query->have_posts()) : while($query->have_posts()) : $query->the_post();

  the_title('<h2>', '</h2>');

    endwhile;
     endif;
     wp_reset_postdata();

wp_die();
}


function register_post_types(){
  register_post_type( 'cases', [
    'label'  => null,
    'labels' => [
      'name'               => 'Cases', // основное название для типа записи
      'singular_name'      => 'Case', // название для одной записи этого типа
      'add_new'            => 'Добавить case', // для добавления новой записи
      'add_new_item'       => 'Добавление case', // заголовка у вновь создаваемой записи в админ-панели.
      'edit_item'          => 'Редактирование case', // для редактирования типа записи
      'new_item'           => 'Новый case', // текст новой записи
      'view_item'          => 'Смотреть case', // для просмотра записи этого типа.
      'search_items'       => 'Искать case', // для поиска по этим типам записи
      'not_found'          => 'Не найдено', // если в результате поиска ничего не было найдено
      'not_found_in_trash' => 'Не найдено в корзине', // если не было найдено в корзине
      'parent_item_colon'  => '', // для родителей (у древовидных типов)
      'menu_name'          => 'Cases', // название меню
    ],
    'description'         => '',
    'public'              => true,
    // 'publicly_queryable'  => true, // зависит от public
    // 'exclude_from_search' => true, // зависит от public
    // 'show_ui'             => true, // зависит от public
    // 'show_in_nav_menus'   => true, // зависит от public
    'show_in_menu'        => true, // показывать ли в меню адмнки
    // 'show_in_admin_bar'   => true, // зависит от show_in_menu
    'show_in_rest'        => true, // добавить в REST API. C WP 4.7
    'rest_base'           => null, // $post_type. C WP 4.7
    'menu_position'       => 4,
    'menu_icon'           => 'dashicons-format-image',
    //'capability_type'   => 'post',
    //'capabilities'      => 'post', // массив дополнительных прав для этого типа записи
    //'map_meta_cap'      => null, // Ставим true чтобы включить дефолтный обработчик специальных прав
    'hierarchical'        => false,
    'supports'            => [ 'title' ], // 'title','editor','author','thumbnail','excerpt','trackbacks','custom-fields','comments','revisions','page-attributes','post-formats'
    'taxonomies'          => array( 'category' ),
    'has_archive'         => false,
    'rewrite'             => true,
    'query_var'           => true,
  ] );
}

function addjs()

{
   wp_register_script('jquery', get_template_directory_uri() . '/js/jquery-3.5.1.slim.min.js' , array(), 1, 1,1);
  wp_enqueue_script('jquery');

   wp_enqueue_script('ajax', get_template_directory_uri() . '/js/ajax.js' , array('jquery'), NULL, true);
  wp_localize_script('ajax', 'wp_ajax',
          array('ajax_url' => admin_url('admin-ajax.php'))
          );

}

add_action('wp_enqueue_scripts', 'addjs');
</code>

Верстка:
<section class="container main-section">
    <ul class="main-section_list js-filter">


  <?php

      $args = array(
  /*'numberposts' => 0,*/
  'post_type'   => 'cases',
  /*'suppress_filters' => true,*/
        'post_per_page' => -1,
) ;

    $query = new WP_Query($args);

    if($query->have_posts()) : while($query->have_posts()) : $query->the_post();?>

  <?php $case = get_field('case');?>
    <li class="main-section_item" >
      <div class="item_block">
        <picture>
          <source media="(min-width: 768px)" srcset="<?php echo $case['image'];?>" />
          <img class="item_block-img" src="<?php echo $case['small_image'];?>" alt="" />
        </picture>
        <div class="cases-section_item-block item_block_top-box">
          <span class="cases-section_item-span item_block_top-box--span">we designed for</span>
          <span class="cases-section_item-title item_block_top-box--title"><?php the_title()?></span>
        </div>
        <div class="cases-section_tag-block item_block_tag-box">
          <span class="cases-section_item-tag cases-section_item-tag--mb"><?php echo $case['first_tag'];?></span>
          <span class="cases-section_item-tag"><?php echo $case['second_tag'];?></span>
        </div>
      <a href="<?php the_permalink()?>" class="cases-section_item-button item_block-button">check the project</a>
</div>
  </li>


    <?php endwhile; ?>
    <?php endif; ?>
    <?php wp_reset_postdata(); ?>


    </ul>
  </section>

Answer the question

In order to leave comments, you need to log in

1 answer(s)
V
Vladimir Druzhaev, 2020-09-23
@OtshelnikFm

You can read lessons on working with ajax on the same wp-kama. Nagovnokodili - but they didn’t open the code.
Who writes handlers like that? Urgently learn materiel. It's all done wrong here

Didn't find what you were looking for?

Ask your question

Ask a Question

731 491 924 answers to any question