Фильтр записей в таксономии созданного типа записей
Создал тип записей '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,
.