Answer the question
In order to leave comments, you need to log in
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
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 questionAsk a Question
731 491 924 answers to any question