Итак, у меня проблема с обработчиком AJAX в WordPress. Это моя форма здесь:
form action="<?php echo site_url() ?>/wp-admin/admin-ajax.php" method="POST" id="filter" name="filter">
<input type="hidden" name="action" value="myfilter">
<?php
if( $terms = get_terms( array( 'taxonomy' => 'category', 'orderby' => 'name' ) ) ) :
echo '<div class="d-flex justify-content-center">';
foreach ( $terms as $term ) :
if($first) : echo '<label><input type="radio" class="radio-formular" value="' . $term->term_id . '" name="categoryfilter" onclick="this.form.submit();" checked>' . $term->name.'</label>'; // ID of the category
else : echo '<label><input type="radio" class="radio-formular" value="' . $term->term_id . '" name="categoryfilter">' . $term->name. '</label>'; // ID of the category as the value
endif;
endforeach;
echo '</div>';
endif;
?>
<button id="sbm">Apply</button>
</form>
, и я хочу, чтобы при выборе одного из рад ios форма отправлялась и обрабатывалась следующим фрагментом кода:
<script type="text/javascript">
jQuery(function($){
$('#filter').submit(function(e){
var filter = $('#filter');
$.ajax({
url:filter.attr('action'),
data:filter.serialize(), // form data
type:filter.attr('method'), // POST
beforeSend:function(xhr){
//filter.find('button').text('Processing...'); // changing the button label
},
success:function(data){
//filter.find('button').text('Apply filter'); // changing the button label back
$('#response').html(data); // insert data
}
});
return false;
});
});
</script>
Оба фрагмента находятся в одном файле.
функций. php
add_action('wp_ajax_myfilter', 'misha_filter_function'); // wp_ajax_{ACTION HERE}
add_action('wp_ajax_nopriv_myfilter', 'misha_filter_function');
function misha_filter_function(){
$args = array(
'orderby' => 'date', // we will sort posts by date
'order' => $_POST['date'] // ASC or DESC
);
// for taxonomies / categories
if( isset( $_POST['categoryfilter'] ) && $_POST['categoryfilter'] != '0' )
$args['tax_query'] = array(
array(
'taxonomy' => 'category',
'field' => 'id',
'terms' => $_POST['categoryfilter']
)
);
// if you want to use multiple checkboxed, just duplicate the above 5 lines for each checkbox
$query = new WP_Query( $args );
if( $query->have_posts() ) :
while( $query->have_posts() ): $query->the_post();
echo '<div class="container-apartament m-3 text-center">';
echo '<img src="'. wp_get_attachment_url(get_post_thumbnail_id($query->post->ID),'full') .'">';
echo '<div class="mt-2 mb-2 card-body">';
echo '<h4>' . $query->post->post_title . '</h4>';
echo '<a href="#myModal-'. $query->post->ID . '" class="band-text-inner"><img src="wp-content/uploads/2020/03/house-plan.png"> Plan </a>';
echo '<p class="card-price">'. get_field("price") .'€ no VAT</p>';
echo '<p class="card-yield">'. get_field("yield") .' NET <span class="text-mic-card">yield/yr: '. (string)0.05*get_field("price")*1000 .' € </span></p>';
echo '<a href="'. get_permalink() .'" class="invest-now">Invest Now </a>';
echo '</div>';
echo '</div>';
endwhile;
wp_reset_postdata();
else :
echo 'No posts found';
endif;
die();
}
Проблема заключается в следующем: Отправка формы с помощью кнопки работает, как и ожидалось, но когда я установил Событие onclick на переключателях застревает в admin- ajax. php вместо возврата значений. Где ошибка? Я борюсь с этим с обеда, и я не могу найти решение. Я пытался protectDefault (), как я видел в другом посте здесь, но он останавливает отправку формы, и я вообще не получаю ответа. Извините за мой плохой английский sh и / или неоднозначное объяснение, и заранее спасибо!