Добавляем и удаляем колонки в таблицах списков таксономий и постов

Сразу говорю, я не буду править файлы движка WordPress, все действия будут проводиться в functions.php в теме.

Таксономии

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

Но не всегда, ведь например можно использовать description для хренения URL какой-нибудь картинки, описывающей таксономию, то есть можно удалить саму колонку с описанием, зато добавить другую, где вставляется то же самое описание, но только через тег или через css background-image.

Как это может выглядеть:

дополнительная колонка с картинками в списке таксономий

Вставка колонки делится на два этапа – это добавление и заполнение.

1-й этап. Добавление колонки в таблицу.

Первый вариант кода, здесь просто перечисляем все колонки, тем самым можно удалить старые и добавить новые:

function true_add_columns($my_columns) {
	$my_columns = array(
		'cb' => '<input type="checkbox" />',
		'preview' => 'Превью'
		'name' => __('Name'),
//		'description' => __('Description'),
		'slug' => __('Slug'),
		'posts' => __('Posts')
		);
	return $my_columns;
}
 
add_filter("manage_edit-{название таксономии}_columns", 'true_add_columns');

Во втором варианте просто добавляем новую, независимо от того, какие колонки уже существуют:

function true_add_columns($my_columns) {
	$preview = array( 'preview' => 'Превью' );
	$my_columns = array_slice( $my_columns, 0, 1, true ) + $preview + array_slice( $my_columns, 1, NULL, true );
	return $my_columns;
}
 
add_filter("manage_edit-{название таксономии}_columns", 'true_add_columns');

Не забудьте заменить {название таксономии} – на название таксономии, то есть category, post_tag, либо ваше собственное и без фигурных скобок!

2-й этап. Содержимое колонки.
Как я и говорил, описание таксономии будет являться URL-ом картинки.

function fill_columns($out, $column_name, $id) {
	$term = get_term($id, '{название таксономии}');
	switch ($column_name) {
		case 'preview':
			$out .= '<img src="'.$term->description.'" width="48" height="48" />'; 
 			break;
		default:
			break;
	}
	return $out;
}
 
add_filter("manage_{название таксономии}_custom_column", 'fill_columns', 10, 3);

Вот ещё один пример, в нём была добавлена колонка с ID для рубрик и меток.
P.S. Ширину колонок можно настроить с помощью стилей.

Записи, типы записей

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

Как и в случае с таксономиями, здесь будет два этапа:

1-й этап. Варианты добавления колонки в таблицу.
Вообще, если разбираешься в PHP, то все эти три варианта сводятся к одному.

1-й вариант:

function true_add_post_columns($my_columns){
	$my_columns['keywords'] = 'Ключевые слова';
	return $my_columns;
}
 
add_filter( 'manage_edit-{тип}_columns', 'true_add_post_columns', 10, 1 );

2-й вариант:

function true_add_post_columns($my_columns){
	$keywords = array( 'keywords' => 'Ключевые слова' );
	$my_columns = array_slice( $my_columns, 0, 1, true ) + $preview + array_slice( $my_columns, 1, NULL, true );
	return $my_columns;
}
 
add_filter( 'manage_edit-{тип}_columns', 'true_add_post_columns', 10, 1 );

3-й вариант, с описанием всех колонок в массиве:

function true_add_post_columns($my_columns){
	$my_columns = array(
		'title' => __('Title'),
		'categories' => __('Categories'),
		'tags' => __('Tags'),
		'comments' => '<span class="vers"><img alt="Comments" src="'.site_url().'/wp-admin/images/comment-grey-bubble.png" /></span>',
		'author' => __('Author'),
		'keywords' => 'Ключевые слова',
		'date' => __('Date')
	);
	return $my_columns;
}
 
add_filter( 'manage_edit-{тип}_columns', 'true_add_post_columns', 10, 1 );

В последней строчке также замените {тип} на нужный тип записи, например post, page или что-то своё.

2-й этап. Заполнение колонки.
А здесь будет один-единственный фильтр, даже не придётся указывать тип, эта функция общая для всех.

 
function true_fill_post_columns( $column ) {
	global $post;
	switch ( $column ) {
		case 'keywords':
			echo get_post_meta($post->ID, 'seo_keywords', true);
			break;
	}
}
 
add_action( 'manage_posts_custom_column', 'true_fill_post_columns', 10, 1 );

Ну вот и всё, как вы уже наверное поняли, seo_keywords (5-я строчка) – это название произвольного поля.

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

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

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

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