@enid
Для создания фильтра по произвольным таксономиям в WordPress необходимо выполнить следующие шаги:
- Создать произвольную таксономию с помощью функции register_taxonomy(). Пример:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
|
function custom_taxonomy() {
$labels = array(
'name' => 'Custom Taxonomy',
'singular_name' => 'Custom Taxonomy',
);
$args = array(
'labels' => $labels,
'public' => true,
'show_admin_column' => true,
'hierarchical' => true,
'show_in_rest' => true,
);
register_taxonomy( 'custom_taxonomy', array( 'post' ), $args );
}
add_action( 'init', 'custom_taxonomy' );
|
- Создать форму для выбора терминов таксономии с помощью функции wp_dropdown_categories(). Пример:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
|
<form action="<?php echo esc_url( home_url( '/' ) ); ?>" method="get">
<select name="custom_taxonomy">
<option value="">All</option>
<?php
$terms = get_terms( array(
'taxonomy' => 'custom_taxonomy',
'hide_empty' => false,
) );
foreach ( $terms as $term ) {
$selected = ( $_GET['custom_taxonomy'] == $term->slug ) ? 'selected' : '';
echo '<option value="' . $term->slug . '" ' . $selected . '>' . $term->name . '</option>';
}
?>
</select>
<input type="submit" value="Filter">
</form>
|
- Вывести отфильтрованные записи на странице с помощью функции WP_Query(). Пример:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
|
$args = array(
'post_type' => 'post',
);
if ( isset( $_GET['custom_taxonomy'] ) && ! empty( $_GET['custom_taxonomy'] ) ) {
$args['tax_query'] = array(
array(
'taxonomy' => 'custom_taxonomy',
'field' => 'slug',
'terms' => $_GET['custom_taxonomy'],
)
);
}
$query = new WP_Query( $args );
if ( $query->have_posts() ) {
while ( $query->have_posts() ) {
$query->the_post();
// вывод постов
}
wp_reset_postdata();
} else {
// сообщение об отсутствии постов
}
|