Как сделать фильтр постов по категориям?

Для создания фильтра постов по категориям в WordPress, вам понадобится выполнить несколько шагов:

Шаг 1: Создание формы фильтра
Создайте форму фильтра, которая будет содержать список доступных категорий, и кнопку "Применить фильтр". Форма может быть создана с использованием тега <form> и элементов <select> и <option> HTML.

Пример:

<form method="get">
  <label for="category-filter">Категория:</label>
  <select name="category" id="category-filter">
    <option value="">Все</option>
    <?php
      $categories = get_categories();
      foreach ($categories as $category) {
        echo '<option value="' . $category->slug . '">' . $category->name . '</option>';
      }
    ?>
  </select>
  <button type="submit">Применить фильтр</button>
</form>

Шаг 2: Обработка данных формы
После отправки формы, вы должны обработать данные и изменить основной запрос WordPress для отображения только постов из выбранной категории.

Пример:

function customize_category_filter($query) {
  if (!is_admin() && $query->is_main_query() && $query->is_home()) {
    $category = $_GET['category'];
    if (!empty($category)) {
      $query->set('category_name', $category);
    }
  }
}
add_action('pre_get_posts', 'customize_category_filter');

Шаг 3: Отобразить результаты
Наконец, вы должны отобразить отфильтрованные результаты с использованием шаблона вашей темы WordPress. Обычно это делается с помощью цикла while в файле index.php или archive.php.

<?php if (have_posts()) : ?>
  <ul>
    <?php while (have_posts()) : the_post(); ?>
      <li>
        <h2><a href="<?php the_permalink(); ?>"><?php the_title(); ?></a></h2>
        <div class="entry-content">
          <?php the_excerpt(); ?>
        </div>
      </li>
    <?php endwhile; ?>
  </ul>
<?php else : ?>
  <p>Нет постов, удовлетворяющих выбранным критериям.</p>
<?php endif; ?>

Это полное руководство о том, как создать фильтр постов по категориям в WordPress. Вы можете настроить форму фильтра и код обработки данных, чтобы соответствовать вашим потребностям.