yanadev
@yanadev
кодю

400 (Bad Request) ajax Wordpress. Как исправить?

Делаю фильтрацию с помощью ajax запроса. Но выдает ошибку 400 (Bad Request). Не могу понять почему
Мой 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>
  • Вопрос задан
  • 54 просмотра
Пригласить эксперта
Ответы на вопрос 2
irtek
@irtek
Wordpress-addicted
У вас функция the_title('', ''); сразу выводит результат и обрывает работу функции и выдает Bad request. Функция должна выдавать итоговый результат в конце. Нужно функцией get_the_title() собрать собрать все заголовки в массив и в конце функции их вернуть и вывести.

И эту функцию wp_reset_postdata() не нужно здесь использовать, т.к. здесь у вас нет основного запроса query_posts WP
Ответ написан
OtshelnikFm
@OtshelnikFm Куратор тега WordPress
Мои работы: otshelnik-fm.ru
Вы уроки по работе с ajax на том же wp-kama почитайте. Наговнокодили - а кодекс видать и не открывали.

Кто так обработчики пишет? Срочно учить матчасть. Здесь всё сделано неправильно
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы