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

Сразу говорю, я не буду править файлы движка 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-я строчка) — это название произвольного поля.

Подпишитесь, чтобы раз в неделю получать свежие статьи с блога по email.

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

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

  • Миша16 мая 2012 в 10:05 #

    кстати, есть ещё и 4-й вариант, который позволяет просто удалить колонку:

    unset($my_columns['categories']);

    как я уже говорил, все сводится к знаниям PHP, но тем не менее решил привести этот пример.

  • Никита15 октября 2014 в 01:10 #

    А если у меня в произвольном типе нет заголовка (title), есть только контент, как выводить в админке title без самого title, т.е чтобы был только контент и управляющие кнопки, типа изменить, свойста итд?
    Пробовал просто the_content, но тогда пропадают управляющие кнопки

  • Кирилл5 декабря 2014 в 19:12 #

    Здравствуйте Миша.
    Скажите пожалуйста как добавить столбец термин в админку произвольных записей(и заполнить его)?

    • Миша6 декабря 2014 в 07:12 #

      Кирилл, добрый день!
      Ну... вся необходимая информация есть в посту. Для вывода присвоенных терминов используйте get_the_terms()

  • Елена25 февраля 2015 в 22:02 #

    Что делать, если нужно обновить таблицу с выводом постов в админке определенного типа при внесении изменений в базу данных с помощью плагина?

  • Елена27 февраля 2015 в 10:02 #

    Нет, не асинхронно. Плагин добавляет произвольное поле в продукт woo-commerce и использует 1 настройку, которая пересчитывает цену (_regular_price) в зависимости от нового произвольного поля и этой настройки (get_option()).
    При изменении настройки, перезаписываются 2 поля в таблице post_meta, в том числе _regular_price и но при выводе продуктов остается старая цена.
    Т.е. в базе данных изменения проходят, а таблица вывода продуктов их не подтягивает при обновлении страницы с продуктами.

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

phpjsHTMLCSSSQLПросто код
  Для того, чтобы оставить комментарий, пожалуйста, зарегистрируйтесь или авторизуйтесь на сайте.
Получайте новости блога по email или следите за мной в социальных сетях.
  • Миша: Метод тыка хорош, но оснвоы нужно знать в любом случае. Рекомендую почитать это.

  • Миша: Добрый вечер! Если я правильно понял, то: if( $opisanie ) echo '' . $opisanie . '' ;

  • alex morozov: Добрый вечер! у меня возникла следующая проблема. Я делаю фотоальбомы, чтобы они выглядели "как в контакте". Так вот, та...

  • Vladislav: Если эту муть убрать, то исчезает меню, и появляется описание под миниатюрами, которого не должно быть, как вы видите, я...

  • Миша: Либо размеры изображений вам помогут, либо CSS. И строку 14 гляньте, там муть какая-то.