Создайте пользовательский фильтр таксономии в произвольном типе записи в WordPress

Чтобы создать собственный фильтр таксономии в произвольном типе публикации, вы можете использовать несколько методов в WordPress. Вот некоторые из наиболее распространенных подходов с примерами кода:

  1. Использование хука действия pre_get_posts:

    // Add taxonomy filter to custom post type
    function add_taxonomy_filter_to_cpt($query) {
       if (!is_admin() && $query->is_main_query() && is_post_type_archive('your_custom_post_type')) {
           if (isset($_GET['your_taxonomy'])) {
               $query->set('tax_query', array(
                   array(
                       'taxonomy' => 'your_taxonomy',
                       'field' => 'slug',
                       'terms' => $_GET['your_taxonomy'],
                   ),
               ));
           }
       }
    }
    add_action('pre_get_posts', 'add_taxonomy_filter_to_cpt');
  2. Использование пользовательской формы с раскрывающимся списком для выбора таксономии:

    // Display taxonomy filter form
    function display_taxonomy_filter_form() {
       $terms = get_terms('your_taxonomy');
       if ($terms) {
           echo '<form method="get">';
           echo '<select name="your_taxonomy">';
           echo '<option value="">Select Taxonomy</option>';
           foreach ($terms as $term) {
               echo '<option value="' . $term->slug . '">' . $term->name . '</option>';
           }
           echo '</select>';
           echo '<input type="submit" value="Filter">';
           echo '</form>';
       }
    }
    add_action('your_custom_post_type_archive', 'display_taxonomy_filter_form');
  3. Использование параметра URL для фильтрации таксономии:

    // Add taxonomy filter to custom post type archive URL
    function add_taxonomy_filter_to_cpt_archive_url($url) {
       if (is_post_type_archive('your_custom_post_type') && isset($_GET['your_taxonomy'])) {
           $url = add_query_arg('your_taxonomy', $_GET['your_taxonomy'], $url);
       }
       return $url;
    }
    add_filter('post_type_archive_link', 'add_taxonomy_filter_to_cpt_archive_url');
    // Modify the main query based on the URL parameter
    function modify_main_query_based_on_url($query) {
       if (!is_admin() && $query->is_main_query() && is_post_type_archive('your_custom_post_type') && isset($_GET['your_taxonomy'])) {
           $query->set('tax_query', array(
               array(
                   'taxonomy' => 'your_taxonomy',
                   'field' => 'slug',
                   'terms' => $_GET['your_taxonomy'],
               ),
           ));
       }
    }
    add_action('pre_get_posts', 'modify_main_query_based_on_url');

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