Сколько у вас постов на блоге? 100 или может быть 10000? Согласитесь, что при огромном количестве записей бывает полезно отобразить только содержимое какой-нибудь конкретной категории в админке. Правда сам я, если вдруг что, пользуюсь поиском, но тем не менее :)
Для этого есть фильтр по рубрикам, который находится на странице с записями:
Окей, вроде всё норм, но однажды у меня один клиент попросил добавить фильтр по таксономиям. Вот типо того:
Знаете, я недавно видел статью (не стану называть автора), в которой проводился обзор: что лучше — Joomla или 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' );
После удаления фильтра по рубрикам может показаться логичным ещё и удаление колонки с рубриками, но эта тема затронута в отдельном посте.
Чтобы оставить комментарий, пожалуйста, зарегистрируйтесь или войдите.
Здравствуйте, я пытаюсь сделать фильтры в интернет магазине на WP. Таксономий довольно много, может лучше организовать все с помощью плагина? Не посоветуете какой нибудь, желательно русифицированный...
Заранее благодарен
Пробую вставить фильтр как вы описываете, в functions.php вставил, таксономии свои подставил, Вопрос - а как сам фильтр собственно вставить на сайт???
фильтр для сайта нужно будет писать ручками уже))
А как добавить стандартный фильтр по категориям к своей таксономии?
Указал:
'taxonomies' => array('category','post_tag', 'katalog')
Появился поиск по категориям, а таксономии не добавились. Не подскажите как в фильтр добавить таксономии.
можно скриншот того, что появилось?
Я создал свой произвольный тип записей. С помощью ‘taxonomies’ => array(‘category’,'post_tag’, ‘katalog’) добавил фильтр но в нем нет поиска по рубрикам из моего произвольного типа записей katalog. В фильтре только рубрики из post
что значит нет поиска?
то есть выпадающий список не появился? появился только для category и post_tag, верно? а нужно и для katalog?
выпадающий список появился но нет рубрик из katalog, а для category и post_tag - есть.
ну надо смотреть и тестить, замени короче тогда 18 строчку в коде на:
конечно у тебя возможно немного по-другому выглядит код, ну короче к if добавь прост.
скажи, выводится ли ноль?
Миша, спасибо большое за помощь! Да у меня был другой код. Подправил по аналогии с твоим и все получилось. Еще раз большое спасибо!
пожалуйста)
Спасибо тебе огромное, ну просто очень помогла статья, несколько дней боролся с созданием фильтра для произвольного типа записей, и наконец победил его благодаря этой статье. Все отлично прокомментировано, поэтому сразу стало понятно где что менять.
Добрый вечер! Спасибо за код для фильтрации по таксономиям. Отрабатывает как положено. Только у меня на экране редактирования таксономии (пока я ничего не нажимаю), просто перешла на экран редактирования и все - в, добавленном с помощью Вашего кода, поле фильтрации, в выпадающем списке термов для каждого терма отображаются Notice: Undefined index: здесь название таксономии и номер строки.
Строку указывает вот эту: echo 'slug, $_GET[$tax] == $term->slug ? ' selected="selected"' : '','>' . $term->name .' (' . $term->count .')';
Можете подсказать в чем причина и как ее устранить?
Спасибо!!!
могу прислать скрин если нужно. только сообщите куда присылать. Кстати, после применения фильтрации по этому столбцу - предупреждение исчезает и все работает превосходно.
Очень нужна ваша помощь, я уже пересмотрела все возможные примеры в нете, но только Ваш отрабатывает полноценно, за исключением этих Notice.
Добрый день!
Код обновил - попробуйте. Напишите пожалуйста, если ошибка исчезла.
Огромное Вам спасибище!!! Теперь ошибок нету))))))))
Успехов и процветания Вам в Новом году!!!
Рад, что всё получилось. Благодарю)) Вам тоже)
Здравствуйте! у меня снова вопрос по фильтрации. Если имя элемента таксономии отличается от слага, то выборка по нему осуществляется, но значение в не изменяется. Там по-прежнему отображается "Все {термы}". Подскажите пожалуйста что и где исправить? Спасибо!
Здравствуйте!
То есть получается переменная
$_GET[$tax]
содержит имя элемента таксономии?Да. вроде бы Вы указали мне на ошибку. Я поняла что нужно исправить. Сейчас еще хорошенько потестирую. Если что отпишусь. Заранее спасибо!
Хорошо, обращайтесь :)
Извините, а можно поподробнее описать куда именно в файле functions.php этот код вставлять. И как привязать его к стандартному поиску WordPress.
В любое место после открывающего тега
<?php
.А можно фильтр по меткам сделать?
По любой таксономии.
А как сделать такой же фильтр по авторам?
Спасибо за отличную идею поста, следующим опубликую.
А пока хоть намекнуть куда смотреть, а ? ;)
В пятницу будет пост)
Вот пожалуйста https://misha.agency/wordpress/filtr-zapisey-po-avtoram.html
И ещё как идею ;)
Есть такая штука http://harvesthq.github.io/chosen/
И на ёе базе есть ряд плагинов ( https://wordpress.org/plugins/wp-chosen/ - один из) Весьма полезная штука, только работает криво. Вот пост по нормальной интеграции этого chosen-а (как включать только там, там где надо) был бы весьма полезен ;)
Хорошо, приму к сведению :)
Добрый день.
Как можно сделать фильтрацию . чтобы показывались только записи текущего автора?
Спасибо
Добрый день!
Через
pre_get_posts
и при помощи функции get_current_user_id() я думаю.Спасибо за код! Есть пару вопросов.
1. Число записей $term->count отображает только опубликованные. Как сделать чтобы и те что черновиками тоже учитывал?
2. Фильтр не работает если слаг $term->slug задан кириллицей. Возможно ли это поправить?