Создание фильтра пользовательской таксономии в списке постов административной части WordPress

Создание фильтра пользовательской таксономии в списке постов административной части WordPress | n-wp.ru

В посте Создание пользовательских таксономий в 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).

Создание фильтра пользовательской таксономии в списке постов административной части WordPress (2)

Этот фильтр можно применять совместно с другими, и тем самым сузить параметры выборки. Например, выбрать все посты определенной таксономии и определенной категории.

Создание фильтра пользовательской таксономии в списке постов административной части WordPress (1)

Если нужно создать фильтры для нескольких пользовательских таксономий, то нужно скопировать вышеприведенный код несколько раз, и изменить в нем названия, ярлыки и наименования функций. Таким образом можно создать в административной части для каждой пользовательской таксономии отдельный фильтр, что упрощает работу с постами, в которых используются несколько пользовательских таксономий.

Автор tiaurus 2182 Articles
Являюсь создателем n-wp.ru — блога о WordPress для новичков. Мне интересно многое, поэтому еще я сделал 123-box.ru — блог о программах для Windows, и tiaurus.info — блог о красоте.

3 Комментарии

  1. В строке 46 нечётное количество апострофов, не хватает одного или один лишний?

Оставить комментарий

Ваш электронный адрес не будет опубликован.


*