Как написать правильно фильтр рубрик?
<?
if ($_GET['post_author'] != 0) { // если передана фильтрация по разделу
$args['meta_query'][] = array( // пишем условия в meta_query
'key' => 'author', // название произвольного поля
'value' => $_POST['author'], // переданное значение произвольного поля
);
}
if ($_GET['category_name'] != 0) { // если передана фильтрация по разделу
$args['meta_query'][] = array( // пишем условия в meta_query
'key' => 'category__and', // название произвольного поля
'value' => $_POST['category__and'], // переданное значение произвольного поля
'type' => 'text',
);
}
?>
<div <?php tie_content_column_attr(); ?>>
<form class="filter" action="" method="post"><!-- action пустой, чтобы ссылалось на текущую страницу -->
<label>Раздел:
<select name="post_author"> <!-- Раздел - селектлист -->
<option value="">Выберите автора</option>
<?php
$users = get_users();
foreach($users as $user)
{
echo "<option ".($user->ID==$post_author?"selected ":"")."value=\"".$user->ID."\">".$user->display_name."</option>";
}
?>
</select>
<select name="category_name"> <!-- Раздел - селектлист -->
<option value="">Выберите категорию</option>
<?php
$categories = get_categories();
foreach($categories as $category)
{
echo "<option ".($category->term_id==$category_name?"selected ":"")."value=\"".$category->term_id."\">".$category->name."</option>";
}
?>
</select>
</label>
<button type="submit">применить фильтр</button>
</form>
<?php
$args = array( 'post_type' => 'post' );
$query = new WP_Query( $args );
if ( $query->have_posts() ) :
// Get the layout template part
TIELABS_HELPER::get_template_part( 'templates/archives2', '', array(
'layout' => tie_get_option( 'blog_display', 'excerpt' ),
'excerpt_length' => tie_get_option( 'blog_excerpt_length' ),
'my_query' => $query
));
// Page navigation
TIELABS_PAGINATION::show( array( 'type' => tie_get_option( 'blog_pagination' ) ) );
else:
TIELABS_HELPER::get_template_part( 'templates/not-found' );
endif;
?>
</div><!-- .main-content /-->
<?php
я написал вот так, ну что то у меня не фильтрует... (я только учусь)
Может я не понял задумку, но вот ты собираешь в начале кода $args. А потом под конец берешь и перезатираешь её на
$args = array( 'post_type' => 'post' );
Может её надо дополнить, а не перезатереть?
наверное, я просто нормального урока по фильтрам не нашел, поэтому не могу понять как обработчик PHP составить для этой формы
<form class="filter" action="" method="post"><!-- action пустой, чтобы ссылалось на текущую страницу -->
<label>Раздел:
<select name="post_author"> <!-- Раздел - селектлист -->
<option value="">Выберите автора</option>
<?php
$users = get_users();
foreach($users as $user)
{
echo "<option ".($user->ID==$post_author?"selected ":"")."value=\"".$user->ID."\">".$user->display_name."</option>";
}
?>
</select>
<select name="category_name"> <!-- Раздел - селектлист -->
<option value="">Выберите категорию</option>
<?php
$categories = get_categories();
foreach($categories as $category)
{
echo "<option ".($category->term_id==$category_name?"selected ":"")."value=\"".$category->term_id."\">".$category->name."</option>";
}
?>
</select>
</label>
<button type="submit">применить фильтр</button>
</form>
сможете помочь составить обработчик?
Пару наводок:
Во-первых, форме Вы указали метод "POST".
В обработчике проверяете, существует ли параметр GET и делаете запрос с параметром POST.
У вас условие не проходит:
if ($_GET['post_author'] != 0) { ... if ($_GET['category_name'] != 0) {замените на:
if (isset($_POST['post_author'])) { ... if (isset($_POST['category_name'])) {И код обработчика нужно поместить после:
Иначе - массив просто переписывается.