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

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

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

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

  • Миша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 и но при выводе продуктов остается старая цена.
    Т.е. в базе данных изменения проходят, а таблица вывода продуктов их не подтягивает при обновлении страницы с продуктами.

  • Дмитрий17 марта 2017 в 18:03 #

    У меня по какой-то причине пропало отображение (как в колонке меню слева, так и метабокс в записях ) раздела рубрик для кастомных типов записей, для базового типа Записи всё есть. Так же нет колонки рубрики. Вроде ничего не отключал.
    Во вкладке у записей "Настройка экрана" тоже нет чекбокса Рубрики.
    Что делать, подскажите плиз....

    • Дмитрий17 марта 2017 в 18:03 #

      сам разобрался: в настройках кастомного типа записи недавно оптимизировал настройки и переоптимизировал: в аргументе 'taxonomies' сейчас поставил => array('category') и стало нормально, а то было array()

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

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

  • Миша: Привет, вообще без проблем, делаешь всё через require(), require_once() - выбирай любую, какая больше нравится.

  • Виталий Моргунов: Привет! Не могу разобаться, как я могу контролировать порядок подключения стилей. В моем случае мне нужно чтобы стили...

  • Миша: Спасибо!

  • w0rmak: Это было просто. Нашел код в интернете. Добавьте и себе ymaps.load(function () { var input = document.getElem...