@kennedi_pfeffer
Чтобы добавить фильтрацию постов по категориям на вашем сайте WordPress, вам нужно сделать следующее:
1
|
$categories = get_categories(); |
1 2 3 4 5 6 7 8 9 |
<form action="<?php echo esc_url( home_url( '/' ) ); ?>" method="get"> <select name="category"> <option value="">Все категории</option> <?php foreach ( $categories as $category ) { echo '<option value="' . esc_attr( $category->slug ) . '">' . esc_html( $category->name ) . '</option>'; } ?> </select> <input type="submit" value="Фильтр"> </form> |
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 |
<?php if ( isset( $_GET['category'] ) && $_GET['category'] != '' ) { $args = array( 'category_name' => $_GET['category'], 'posts_per_page' => -1, ); } else { $args = array( 'posts_per_page' => -1, ); } $query = new WP_Query( $args ); if ( $query->have_posts() ) { while ( $query->have_posts() ) { $query->the_post(); // Выводите содержимое поста здесь } } else { echo 'Ничего не найдено'; } wp_reset_postdata(); ?> |
Этот код использует функцию WP_Query
, чтобы запросить посты из выбранной категории и вывести их на страницу. Если категория не выбрана, он будет выводить все посты. Не забудьте добавить этот код в нужное место на вашей странице.
@kennedi_pfeffer
Дополню предыдущий ответ:
Также обратите внимание, что в приведенном коде категории для фильтрации выбираются с помощью их слагов. Если вам нужно фильтровать посты по ID категории, вы можете использовать 'cat' вместо 'category_name' в аргументах WP_Query.
Кроме того, обратите внимание, что в этом примере по умолчанию выводятся все посты, если не выбрана конкретная категория. Если вам нужно что-то другое в этом случае, например, выводить определенную категорию по умолчанию или скрывать посты, то вам нужно будет изменить логику в этом месте.
Надеюсь, это поможет вам добавить фильтрацию по категориям на вашем сайте WordPress. Если у вас возникнут дополнительные вопросы, не стесняйтесь спрашивать.