В посте Создание пользовательских таксономий в WordPress я привел пример создания пользовательской таксономии Способы оплаты. Эту таксономию можно использовать при создании постов. Однако WordPress пока не научился автоматически добавлять фильтры постов с пользовательскими таксономиями в списки записей – это нужно делать вручную или использовать дополнительные плагины. Давайте посмотрим, как можно в админке создать фильтр для отбора постов определенной пользовательской таксономии без дополнительных плагинов.
Для создания фильтра для постов новой таксономии нужно отредактировать файл functions.php. В предыдущей записи о пользовательских таксономиях я для примера привел код, создающий таксономию Способы оплаты. Она имеет ярлык money – давайте для этой таксономии создадим фильтр постов. Для создания такого фильтра в списке постов нужно добавить в файл functions.php:
function restrict_posts_by_money() { global $typenow; $post_type = 'post'; $taxonomy = 'money'; if ($typenow == $post_type) { $selected = isset($_GET[$taxonomy]) ? $_GET[$taxonomy] : ''; $info_taxonomy = get_taxonomy($taxonomy); wp_dropdown_categories(array( 'show_option_all' => __("Показать все {$info_taxonomy->label}"), 'taxonomy' => $taxonomy, 'name' => $taxonomy, 'orderby' => 'name', 'selected' => $selected, 'show_count' => true, 'hide_empty' => true, )); }; } add_action('restrict_manage_posts', 'restrict_posts_by_money'); function convert_id_to_term_in_query($query) { global $pagenow; $post_type = 'post'; $taxonomy = 'money'; $q_vars = &$query->query_vars; if ($pagenow == 'edit.php' && isset($q_vars['post_type']) && $q_vars['post_type'] == $post_type && isset($q_vars[$taxonomy]) && is_numeric($q_vars[$taxonomy]) && $q_vars[$taxonomy] != 0) { $term = get_term_by('id', $q_vars[$taxonomy], $taxonomy); $q_vars[$taxonomy] = $term->slug; } } add_filter('parse_query', 'convert_id_to_term_in_query'); function add_taxonomy_filters() { global $typenow; $taxonomies = array('money_topics'); if( $typenow == 'money' ){ foreach ($taxonomies as $tax_slug) { $tax_obj = get_taxonomy($tax_slug); $tax_name = $tax_obj->labels->name; $terms = get_terms($tax_slug); if(count($terms) > 0) { echo ""; echo "Показать все $tax_name"; foreach ($terms as $term) { echo 'slug, $_GET[$tax_slug] == $term->slug ? ' selected="selected"' : '','>' . $term->name .' (' . $term->count .')'; } echo ""; } } } } add_action( 'restrict_manage_posts', 'add_taxonomy_filters' );
Переменная $post_type = ‘post’; указывает на тип записей, для которых будет создан фильтр. В нашем случае это посты.
Переменная $taxonomy = ‘money’; указывает на таксономию, для которой создается фильтр. В нашем случае таксономия имеет ярлык (не название) money.
После добавления этого кода в списке постов в админке появится еще один фильтр, с помощью которого можно выбрать посты таксономии Способы оплаты (ярлык money).
Этот фильтр можно применять совместно с другими, и тем самым сузить параметры выборки. Например, выбрать все посты определенной таксономии и определенной категории.
Если нужно создать фильтры для нескольких пользовательских таксономий, то нужно скопировать вышеприведенный код несколько раз, и изменить в нем названия, ярлыки и наименования функций. Таким образом можно создать в административной части для каждой пользовательской таксономии отдельный фильтр, что упрощает работу с постами, в которых используются несколько пользовательских таксономий.
спасибо все работает отлично.
Большое спасибо! Помогло!
В строке 46 нечётное количество апострофов, не хватает одного или один лишний?