Добавление фильтра по таксономиям

Сколько у вас постов на блоге? 100 или может быть 10000? Согласитесь, что при огромном количестве записей бывает полезно отобразить только содержимое какой-нибудь конкретной категории в админке. Правда сам я, если вдруг что, пользуюсь поиском, но тем не менее 🙂

Для этого есть фильтр по рубрикам, который находится на странице с записями:

стандартный фильтр по рубрикам

Окей, вроде всё норм, но однажды у меня один клиент попросил добавить фильтр по таксономиям. Вот типо того:

фильтер по таксономиям в WordPress

Знаете, я недавно видел статью (не стану называть автора), в которой проводился обзор: что лучше — Joomla или WordPress, там говорилось, что:

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

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

function true_taxonomy_filter() {
    global $typenow; // тип поста
    if( $typenow == 'post' ){ // для каких типов постов отображать
        $taxes = array('platform', 'game'); // таксономии через запятую
        foreach ($taxes as $tax) {
            $current_tax = isset( $_GET[$tax] ) ? $_GET[$tax] : '';
            $tax_obj = get_taxonomy($tax);
            $tax_name = mb_strtolower($tax_obj->labels->name);
            // функция mb_strtolower переводит в нижний регистр
            // она может не работать на некоторых хостингах, если что, убирайте её отсюда
            $terms = get_terms($tax);
            if(count($terms) > 0) {
                echo "<select name='$tax' id='$tax' class='postform'>";
                echo "<option value=''>Все $tax_name</option>";
                foreach ($terms as $term) {
                    echo '<option value='. $term->slug, $current_tax == $term->slug ? ' selected="selected"' : '','>' . $term->name .' (' . $term->count .')</option>'; 
                }
                echo "</select>";
            }
        }
    }
}
 
add_action( 'restrict_manage_posts', 'true_taxonomy_filter' );

Ну как бы и добавить больше нечего, исчерпывающий код 🙂 вставляем в файл functions.php вашей темы и радуемся.

P.S. Если хотите удалить при этом стандартный фильтр по рубрикам, используйте вот этот код:

add_filter( 'wp_dropdown_cats', '__return_false' );

После удаления фильтра по рубрикам может показаться логичным ещё и удаление колонки с рубриками, но эта тема затронута в отдельном посте.

Источник: misha.blog

Миша Рудрастых

Путешествует по миру и рассказывает всем о WordPress лично, у себя в блогах и на курсах в Санкт-Петербурге. Умеет просто объяснять сложные вещи, делает это красиво. Организовывает неплохие WordCamp's, но совсем не умеет слушать чужие доклады.

Добавить комментарий

%d такие блоггеры, как: