Чтобы создать собственный фильтр таксономии в произвольном типе публикации, вы можете использовать несколько методов в WordPress. Вот некоторые из наиболее распространенных подходов с примерами кода:
-
Использование хука действия
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'); -
Использование пользовательской формы с раскрывающимся списком для выбора таксономии:
// 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'); -
Использование параметра 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');
Это всего лишь несколько примеров того, как можно реализовать собственный фильтр таксономии в произвольном типе публикации. Вы можете выбрать метод, который лучше всего соответствует вашим потребностям, и настроить его по мере необходимости.