【发布时间】:2021-09-27 07:31:20
【问题描述】:
我正在使用 AJAX 按类别过滤帖子,效果很好。但是,当我尝试添加另一个过滤器以按名为专辑日期的自定义字段进行过滤时,我的原始类别过滤器不起作用。那里的每个过滤器都有自己的工作原理,但它们不能一起工作。这是精简后的代码。
我仍在学习这一切如何协同工作,因此我们将不胜感激!
PHP 代码
function my_filter_function(){
// post date
$args = array(
'orderby' => 'date',
'order' => $_POST['date']
);
// for taxonomies / categories
if(isset($_POST['categoryfilter']))
$args['tax_query'] = array(
array(
'taxonomy' => 'category',
'field' => 'id',
'terms' => $_POST['categoryfilter']
)
);
// album year
if(isset($_POST['yearfilter']))
$args = array(
'meta_key' => 'album_year',
'meta_value' => $_POST['yearfilter'],
);
$query = new WP_Query( $args );
if( $query->have_posts() ) :
while( $query->have_posts() ): $query->the_post();
echo '<h1>' . $query->post->post_title . '</h1>';
...
endwhile;
wp_reset_postdata();
else :
echo 'No posts found';
endif;
die();
}
add_action('wp_ajax_myfilter', 'my_filter_function'); // wp_ajax_{ACTION HERE}
add_action('wp_ajax_nopriv_myfilter', 'my_filter_function');
表格代码
<form action="<?php echo site_url() ?>/wp-admin/admin-ajax.php" method="POST" id="filter">
<?php
// Category Filter
if($terms = get_terms(array('taxonomy' => 'category', 'orderby' => 'name'))) :
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 the value of an option
endforeach;
echo '</select>';
endif;
?>
<?php
// Year Filter
$posts = get_posts(array(
'posts_per_page' => -1,
'post_type' => 'post',
'meta_key' => 'album_year',
'orderby' => 'meta_value',
'order' => 'DESC'
));
if( $posts ):
echo '<select name="yearfilter"><option value="">Select Year...</option>';
foreach($posts as $post):
$album_year = get_field('album_year');
echo '<option value="' . $album_year . '">' . $album_year . '</option>';
endforeach;
echo '</select>';
wp_reset_postdata();
endif;
?>
<label>
<input type="radio" name="date" value="ASC" /> Date: Ascending
</label>
<label>
<input type="radio" name="date" value="DESC" checked="checked" /> Date: Descending
</label>
<button>Apply filter</button>
<input type="hidden" name="action" value="myfilter">
</form>
【问题讨论】: