Здравствуйте! В модальном окне выводятся записи, которые фильтруются по категориям и меткам. Фильтр нашел
тут, подправил под свои нужды, теперь он выглядит так :
Само окно
<div id="myModal" class="modal fade none in" style="display: block;">
<div class="modal-dialog">
<div class="modal-content">
<div class="modal-header">
<button type="button" class="close" data-dismiss="modal" aria-hidden="false">×</button>
<h4 class="modal-title title">Ежедневно в наше агентство поступает более 100 новых заявок на аренду квартиры. Выберете из нашей базы жильцов, которых готовы заселить.</h4>
</div>
<!-- FILTER -->
<form class="form-horizontal" action="<?php echo site_url() ?>/wp-admin/admin-ajax.php" method="POST" id="filter">
<div class="select_style">
<div class="col-lg-4">
<?php
if( $terms = get_terms( array(
'taxonomy' => 'category', // to make it simple I use default categories
'orderby' => 'name'
) ) ) :
// if categories exist, display the dropdown
echo '<select name="categoryfilter"><option value="">Select category...</option>';
foreach ( $terms as $term ) :
echo '<option value="' . $term->term_id . '">' . $term->name . '</option>'; // ID of the category as an option value
endforeach;
echo '</select>';
endif;
?>
</div>
<div class="col-lg-4">
<?php
if( $terms = get_terms( array(
'taxonomy' => 'post_tag', // to make it simple I use default categories
'orderby' => 'name'
) ) ) :
// if categories exist, display the dropdown
echo '<select name="postTagfilter"><option value="">Select category...</option>';
foreach ( $terms as $term ) :
echo '<option value="' . $term->term_id . '">' . $term->name . '</option>'; // ID of the category as an option value
endforeach;
echo '</select>';
endif;
?>
<button>Apply filter</button>
<input type="hidden" name="action" value="myfilter">
</div>
</div>
</form>
<!-- END FILTER -->
<!-- Основное содержимое модального окна -->
<div class="modal-body body_style">
<div class="panel-body">
<div id="orders-place" class="item">
<?php
$query = new WP_Query( array('taxonomy') );
if($query->have_posts()) : while ($query->have_posts()) : $query->the_post();
?>
<div class="infoflat" id='<post-<?php the_ID(); ?>'>
<h3 id="cat-<?php $category = get_the_category(); echo $category[0]->cat_ID; ?>">
<b>Метро:</b> <?php echo the_category('cat_name'); ?>
</h3>
<h3 id="tag-<?php $post_tag = get_the_tags(); echo $post_tag[0]->term_id ?>">
<b>Комнат:</b> <?php the_tags('','',''); ?>
</h3>
<?php the_content(); ?>
<p><b>Цена:</b> 45000</p>
<div id="response"></div>
</div>
<?php
endwhile;
endif;
wp_reset_query();
?>
</div>
</div>
</div>
</div>
</div>
</div>
Выглядит так :
То что я поставил в functions
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'] ) )
$args['tax_query'] = array(
'relation' => 'AND',
array(
'taxonomy' => 'category',
'field' => 'id',
'terms' => $_POST['categoryfilter']
)
);
if( isset( $_POST['postTagfilter'] ) )
$args['tax_query'] = array(
'relation' => 'AND',
array(
'taxonomy' => 'post_tag',
'field' => 'id',
'terms' => $_POST['postTagfilter']
)
);
$query = new WP_Query( $args );
if( $query->have_posts() ) :
while( $query->have_posts() ): $query->the_post(); ?>
<?php the_content(); ?>
<?php endwhile;
wp_reset_postdata();
else :
echo 'No posts found';
endif;
die();
}
Файл с jQuery я не трогал.
Фильтр работает, но он результаты выводит в wp-admin/admin-ajax.php, в то время как мне нужно , что бы фильтрация проходила внутри модального окна и без перезагрузки.. Я понимаю , что дело в actione... Я просто не могу понять как сделать правильно... Подскажите как это сделать? Я пока не совсем понимаю что нужно, объясните, пожалуйста.