Фильтр записей в таксономии созданного типа записей
Создал тип записей 'event_post', в нем 2 таксономии: 'vebinary'и 'industry-events'.
Задача: получить и вывести в селекты год и месяц публикации постов. Выбирая год и месяц в селектах отправлять get-запрос и получать выборку постов из таксономии.
Выборка постов должна выводиться там же где выводится изначальный список.
Уважаемые, если есть какие-то мысли по поводу - буду крайне признателен.
Так например получил месяцы, аналогично - года.
<select name="monthnum[]" id="">
<option value="all">Любой</option>
<?
$get_month = 'MONTH(post_date)';
$months =
"SELECT DISTINCT $get_month
FROM $wpdb->posts
WHERE post_status = 'publish'
AND post_type = 'event_post'
";
$s_month = $wpdb->get_results($months);
$filter_month = $_GET['monthnum'] ?: [];
if ($s_month) {
foreach ($s_month as $month) {
$p_month = $month->$get_month;
echo '<option value="' . $p_month . '" ';
echo in_array($p_month, $filter_month) ? ' selected ' : '';
echo '>' . $p_month . '</option>';
}
}
?>
</select>
А так пытаюсь вывести выборку постов (с годом, месяцем):
$term = get_term_by('slug', get_query_var('term'), get_query_var('taxonomy'));
$event_terms = $term->slug;
$filter_month = $_GET['monthnum'] ?: [];
$filter_year = $_GET['year'] ?: [];
$query_args = array(
'post_type' => 'event_post',
'post_status' => 'publish',
'year' => $filter_year,
'monthnum' => $filter_month,
'tax_query' => array(
array(
'taxonomy' => 'event_cat',
'field' => 'slug',
'category__not_in' => 46,
'terms' => $event_terms,
)
),
);
$q = new WP_Query($query_args);
// echo '<pre>';
// print_r ($q);
// echo '</pre>';
if ($q->have_posts()) :
while ($q->have_posts()) : $q->the_post();
get_template_part('templates/content-events');
endwhile;
endif;
wp_reset_postdata();
Но, так понимаю, что новый объект WP вообще игнорирует мои горе-даты
Кама, благодарю за реакцию! Разобрался, в чем была проблема, кому-то может пригодиться:
Когда новый вп-квери создаем для вывода отфильтрованных постов не забываем эти строчки:
'post_type' => 'post', 'post_status' => 'publish', 'category__in' => array(1), 's' => $_GET['news_list'], 'date_query' => array( 'relation' => 'OR', // ставим "или" array( 'year' => $filter_year, 'month' => $filter_month, 'compare' => '=', // сравниваем значения ), ),
Вопрос по этой же теме, сейчас тянутся месяцы цифрами, может кто знает как их попроще словами сделать?
В целом вроде все норм. Ток в основной массив перенеси
'category__not_in' => 46,.