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

Сколько у вас постов на блоге? 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' );

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

Миша Рудрастых Разработчик WordPress WooCommerce

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

Впервые познакомился с WordPress в 2009 году, и после двух лет мучений с Joomla и самописными движками это был просто бальзам на душу. С 2014 года меня можно встретить на WordCamp — официальной конфе по WP в Москве, иногда там выступаю. Также в настоящее время веду курсы по WordPress в Epic Skills в Питере.

Смотрите также