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

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

HIT

02.10.2016

1452

Для различных целей мы можем настраивать вид и функционал админ части сайта. Выводить дополнительные поля, таксономии, сортировать по этим данным, а также оформлять элементы управления.

Миниатюра в панели редактирования

Добавим код в functions.php. Последний блок — привязка к постам и страницам.

add_image_size( 'admin-list-thumb', 80, 80, false );

// add featured thumbnail to admin post columns
function wpcs_add_thumbnail_columns( $columns ) {
	$columns = array(
		'cb' => '<input type="checkbox" />',
		'featured_thumb' => 'Миниатюра',
		'title' => 'Title',
		'author' => 'Author',
		'categories' => 'Categories',
		'tags' => 'Tags',
		'comments' => '<span class="vers"><div title="Comments" class="comment-grey-bubble"></div></span>',
		'date' => 'Date'
	);
	return $columns;
}

function wpcs_add_thumbnail_columns_data( $column, $post_id ) {
	switch ( $column ) {
		case 'featured_thumb':
		echo '<a href="' . get_edit_post_link() . '">';
		echo the_post_thumbnail( 'admin-list-thumb' );
		echo '</a>';
		break;
	}
}

if ( function_exists( 'add_theme_support' ) ) {
	add_filter( 'manage_posts_columns' , 'wpcs_add_thumbnail_columns' );
	add_action( 'manage_posts_custom_column' , 'wpcs_add_thumbnail_columns_data', 10, 2 );
	add_filter( 'manage_pages_columns' , 'wpcs_add_thumbnail_columns' );
	add_action( 'manage_pages_custom_column' , 'wpcs_add_thumbnail_columns_data', 10, 2 );
}

В данном решении мы создали дополнительный размер миниатюры. Это необязательно, можно использовать стандартный или свой размер.

Если нужно добавить функцию к определенному типу записей, то нужно его прописать здесь:

add_filter( 'manage_slide_posts_columns' , 'wpcs_add_thumbnail_columns' );
add_action( 'manage_slide_posts_custom_column' , 'wpcs_add_thumbnail_columns_data', 10, 2 );

Добавляем цвета к статусам

// Colours posts rows depending on the status
add_action( 'admin_footer', 'admin_footer_example' );
function admin_footer_example() {
    echo '<style type="text/css">
    .status-draft   { background: #FCE3F2 !important; }
    .status-pending { background: #87C5D6 !important; }
    .status-future  { background: #C6EBF5 !important; }
    .status-private { background: #F2D46F !important; }
    </style>';
}

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

Выводим колонку с ID

if (is_admin()) {
	// колонка "ID" для постов и страниц в админке
	add_filter('manage_posts_columns', 'posts_add_col', 5);
	add_action('manage_posts_custom_column', 'posts_show_id', 5, 2);
	add_filter('manage_pages_columns', 'posts_add_col', 5);
	add_action('manage_pages_custom_column', 'posts_show_id', 5, 2);
	add_action('admin_print_styles-edit.php', 'posts_id_style');
	function posts_add_col($defaults) {$defaults['wps_post_id'] = __('ID'); return $defaults;}
	function posts_show_id($column_name, $id) {if ($column_name === 'wps_post_id') echo $id;}
	function posts_id_style() {print '<style>#wps_post_id{width:4em}</style>';} 
}

Удалить лишнюю колонку

Удаляем колонку коментарии

//удаление колонки комментариев в списке
function wph_remove_comments_column($defaults) {
    unset($defaults['comments']);
    unset($defaults['categories']);
    return $defaults;
}
add_filter('manage_pages_columns', 'wph_remove_comments_column');
add_filter('manage_posts_columns', 'wph_remove_comments_column');

Удалить колонки All in One SEO Pack

function wph_remove_comments_column($defaults) {
    unset($defaults['seotitle']);
    unset($defaults['seodesc']);
    unset($defaults['seokeywords']);
    return $defaults;
}
add_filter('manage_pages_columns', 'wph_remove_comments_column', 999);
add_filter('manage_posts_columns', 'wph_remove_comments_column', 999);

Добавить колонку с пользовательским полем (acf)

price — slug пользовательского поля

// Создаем колонку Price
function add_acf_columns ( $columns ) {
$columns['price'] = 'Price';
    return $columns;
}
add_filter ( 'manage_post_posts_columns', 'add_acf_columns' );

// Заполняем колонку данными из поля price
add_action('manage_posts_custom_column', 'shiba_render_post_columns', 10, 2);
 
function shiba_render_post_columns($column_name, $id) {
    switch ($column_name) {
    case 'price':
        $price_id = get_post_meta( $id, 'price', TRUE);
		echo $price_id;
    break;
    }
}

По добавлению мета полей (не acf) подробнее здесь

Сортировка по произвольной колонке

Добавим сортировку по пользовательской колонке price

add_filter( 'manage_edit-post_sortable_columns', 'my_website_manage_sortable_columns' );
function my_website_manage_sortable_columns( $sortable_columns ) {
   $sortable_columns['price'] = 'price';
   return $sortable_columns;
}


add_action( 'pre_get_posts', 'manage_wp_posts_be_qe_pre_get_posts', 1 );
function manage_wp_posts_be_qe_pre_get_posts( $query ) {
   if ( $query-&gt;is_main_query() &amp;&amp; ( $orderby = $query-&gt;get( 'orderby' ) ) ) {
        switch( $orderby ) {
			case 'price':
				$query-&gt;set( 'meta_key', 'price' );
				$query-&gt;set( 'orderby', 'meta_value' );
			break;
        }
   }
}

Если смешанный тип данных текст и числа лучше использовать meta_value. Если только числа то meta_value_num

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

За основу данного решения взял плагин Admin post tag filter (100). Он у меня не работал, пришлось подправить одну строку (выделено жирным).

function aptf_manage_posts_by_tag(){
	global $wp_taxonomies;
	if ( is_array( $wp_taxonomies ) ) {
		$no_category_and_links = array('');
		foreach( $wp_taxonomies as $tax ) {
			
				if($tax->name == 'post_tag'){ 
				$the_terms = get_terms($tax->name,'orderby=name&hide_empty=0' );
				$content  = '<select name="'.$tax->name.'" id="'.$tax->name.'" class="posttagfilter">';
				$content .= '<option value=""> All '.$tax->label.'</option>';
				
				foreach ($the_terms as $term){
					$selected_tag = '';
					$content .= '<option value="' . $term->slug . '"> '. $term->slug . '</option>';
				}
				
				$content .= '</select>';
				$content = str_replace('post_tag', 'tag', $content); 
				echo($content);
			}
		}
	}
}

add_action('restrict_manage_posts', 'aptf_manage_posts_by_tag');

Изменяя строку if($tax->name == ‘post_tag’) можно выводить фильтр по любой таксономии.

Добавляем фильтр по автору

Решение от Мишы Рудастых.

function true_filtr_po_avtoram() {
	$parameters = array(
		'name' => 'author',
		'show_option_all' => 'Все авторы'
	);
 
	if ( isset($_GET['user']) )
		$parameters['selected'] = $_GET['user'];
 
	wp_dropdown_users( $parameters );
}
 
add_action('restrict_manage_posts', 'true_filtr_po_avtoram');

Массовое изменение категорий

Массово добавить записям категории возможно, а вот удалить нет. Если требуется отредактировать (в т.ч. какие-то удалить) массово категории у записей — нужно воспользоваться плагином Mass set Categories (300+).

Тэги:

Поделится информацией с друзьями

  • Похожие записи
  • Комментарии
  • Вложения
Маскировка wordpress

Маскировка wordpress

Маскируем CMS WordPress, чтобы при предварительном анализе WP не выявлялся. Изменяем вход в админку, пути к файлам. Это так же хорошо и для безопасности, т.к. мы предотвращаем атаки стандартных алгоритмов. Читать далее »

Наводим порядок в админке

Наводим порядок в админке

Некоторые принципы по созданию порядка в админке и удобству реализации функционала сайта. Для удобства редактирования кода устанавливаем плагин Advanced Code Editor. Он также немного преобразует панель Редактирование. Также плагин дает Читать далее »

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

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

Расширяем стандартную панель редактирования таксономий (точнее терминов): категорий, меток и пользовательских. Выводим колонку с ID if (is_admin()) { // колонка "ID" для таксономий (рубрик, меток и т.д.) в админке foreach Читать далее »

Добавить комментарий

Пока нет комментариев. Будь первым!

Настраиваем панель редактирования записей Настраиваем панель редактирования записей
Интеграция форм AmoCRM
Рекомендации для васИнтеграция форм AmoCRMOpttour.ru
Спасибо! Наш менеджер свяжется с Вами в течении 5 минут.