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

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

HIT

02.10.2016

3101

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

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

Добавим код в 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 );

Взять в виде миниатюры первое изображение Featured Gallery:

function wpcs_add_thumbnail_columns_data( $column, $post_id ) {
	$galleryArray = get_post_gallery_ids($post_id);
	switch ( $column ) {
		case 'featured_thumb':
		echo wp_get_attachment_image( $galleryArray[0], 'thumbnail' );
		break;
	}
}

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

// 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) подробнее здесь.

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

// Колонка Дата изменения записи

// Register the column
function modified_column_register( $columns ) {
    $columns['modified_list'] = __( 'Дата изменения', 'my-plugin' );
  
    return $columns;
}
add_filter( 'manage_edit-post_columns', 'modified_column_register' );
 
// Display the column content
function modified_column_display( $column_name, $post_id ) {
    if ( 'modified_list' != $column_name )
        return;
    echo the_modified_date();
	echo ' в ';
	echo the_modified_time();
	
	// либо можно вывести так
	// echo the_modified_date('d.m.Y в G:i');
}
add_action( 'manage_posts_custom_column', 'modified_column_display', 10, 2 );

Можно добавить сортировку по данной колонке — см. следующий абзац, но функция привязываемая к pre_get_posts будет в разы проще т.к. можно установить в orderby значение modified (сортировка по дате изменения).

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

Основным условием правильной сортировки в этом случае является формат сохранения даты в метаполе, он должен быть такой: Y-m-d (2021-10-04). В противном случае сортировка работать не будет.

// Колонка Дата изменения записи (не date modified)

// Register the column
function modified_column_register( $columns ) {
    $columns['last_update'] = __( 'Дата изменения', 'my-plugin' );
  
    return $columns;
}
add_filter( 'manage_edit-post_columns', 'modified_column_register' );
 
// Display the column content
function modified_column_display( $column_name, $post_id ) {
    if ( 'last_update' != $column_name )
        return;
		echo get_post_meta($post_id, 'last_update', true);
}
add_action( 'manage_posts_custom_column', 'modified_column_display', 10, 2 );



add_filter( 'manage_edit-post_sortable_columns', 'last_update_manage_sortable_columns' );
function last_update_manage_sortable_columns( $sortable_columns ) {
   $sortable_columns['last_update'] = 'last_update';
   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->is_main_query() && ( $orderby = $query->get( 'orderby' ) ) ) {

        switch( $orderby ) {
			case 'last_update':

				$meta_query = array(
					array(
						'key'     => 'last_update',
						'value'   => date('Y-m-d'),
						'type'    => 'DATE',
						'compare' => '<='
					)
				);

				$query->set( 'orderby', 'meta_value' );
				$query->set( 'meta_key', 'last_update' );	
				$query->set( 'meta_query', $meta_query );				

			break;
        }
   }
}

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

Добавим сортировку по пользовательской колонке 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->is_main_query() && ( $orderby = $query->get( 'orderby' ) ) ) {
        switch( $orderby ) {
			case 'price':
				$query->set( 'meta_key', 'price' );
				$query->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');

Фильтр по произвольному полю

// Фильтр по произвольному полю (branch)
function wisdom_filter_tracked_plugins() {
	global $wp_query;
	$plugins = array( 'МАГАЗИНЫ / СЕТИ', 'СТО', 'Интернет-магазины', 'Автопарки', 'Индустриальные объекты' ); // Options for the filter select field
	$current_plugin = '';
	if( isset( $_GET['branch'] ) ) {
		$current_plugin = $_GET['branch']; // Check if option has been selected
	} ?>
	<select name="branch" id="branch">
		<option value="Все отрасли" <?php selected( 'Все отрасли', $current_plugin ); ?>><?php _e( 'Все отрасли', 'wisdom-plugin' ); ?></option>
		
		<?php foreach( $plugins as $key=>$value ) { ?>
			<option value="<?php echo esc_attr( $value ); ?>" <?php selected( $value, $current_plugin ); ?>><?php echo esc_attr( $value ); ?></option>
		<?php } ?>
	</select>
	<?php
}
add_action( 'restrict_manage_posts', 'wisdom_filter_tracked_plugins' );


function wisdom_sort_plugins_by_meta_field( $query ) {
	global $pagenow;
	if ( is_admin() && $pagenow=='edit.php' && isset( $_GET['branch'] ) && $_GET['branch'] !='Все отрасли' ) {
	$meta_query = array(
            array(
                'key' => 'branch',
                'value' => $_GET['branch'],
            )
        );
        $query->set( 'meta_query', $meta_query );
	}
}
add_filter( 'parse_query', 'wisdom_sort_plugins_by_meta_field' );

Два и более фильтров по произвольному полю

Выводим 2 поля управления фильтрами в одной функции:

// Фильтры по произвольным полям (Статус и Тип)
function wisdom_filter_tracked_plugins() {
	global $wp_query;
	$plugins = array( 'Работающая торговая точка', 'Потенциальный клиент', 'Отгрузка прекращена' ); // Options for the filter select field
	$current_plugin = '';
	if( isset( $_GET['condition'] ) ) {
		$current_plugin = $_GET['condition']; // Check if option has been selected
	} ?>
	<select name="condition" id="condition">
		<option value="Все статусы" <?php selected( 'Все статусы', $current_plugin ); ?>><?php _e( 'Все статусы', 'wisdom-plugin' ); ?></option>
		
		<?php foreach( $plugins as $key=>$value ) { ?>
			<option value="<?php echo esc_attr( $value ); ?>" <?php selected( $value, $current_plugin ); ?>><?php echo esc_attr( $value ); ?></option>
		<?php } ?>
	</select>

	<?php $plugins_2 = array( 'Легковые', 'Грузовые', 'Сетевые' ); // Options for the filter select field
	$current_plugin_2 = '';
	if( isset( $_GET['kind'] ) ) {
		$current_plugin_2 = $_GET['kind'];
	} ?>

	<select name="kind" id="kind">
		<option value="Все типы" <?php selected( 'Все типы', $current_plugin_2 ); ?>><?php _e( 'Все типы', 'wisdom-plugin' ); ?></option>
		
		<?php foreach( $plugins_2 as $key=>$value ) { ?>
			<option value="<?php echo esc_attr( $value ); ?>" <?php selected( $value, $current_plugin_2 ); ?>><?php echo esc_attr( $value ); ?></option>
		<?php } ?>
	</select>

	<?php
}
add_action( 'restrict_manage_posts', 'wisdom_filter_tracked_plugins' );

А в функции изменения запроса делаем разные запросы в зависимости от выбранных полей

function wisdom_sort_plugins_by_meta_field( $query ) {
	global $pagenow;
	if ( is_admin() && $pagenow=='edit.php' ) {
		
		if ( isset( $_GET['condition'] ) && $_GET['condition'] !='Все статусы' && isset( $_GET['kind'] ) && $_GET['kind'] !='Все типы' ) {
			
			$meta_query = array(
				array(
					'key' => 'condition',
					'value' => $_GET['condition'],
				),
				array(
					'key' => 'kind',
					'value' => $_GET['kind'],
				),			
			);
			$query->set( 'meta_query', $meta_query );
			
		} elseif ( isset( $_GET['condition'] ) && $_GET['condition'] !='Все статусы' ) {
			
			$meta_query = array(
				array(
					'key' => 'condition',
					'value' => $_GET['condition'],
				),		
			);
			$query->set( 'meta_query', $meta_query );			
			
		} elseif ( isset( $_GET['kind'] ) && $_GET['kind'] !='Все типы' ) {
			
			$meta_query = array(
				array(
					'key' => 'kind',
					'value' => $_GET['kind'],
				),			
			);
			$query->set( 'meta_query', $meta_query );			
			
		}
		
	}
}
add_filter( 'parse_query', 'wisdom_sort_plugins_by_meta_field' );

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

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

Поделиться в соц. сетях:

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

Подсветка синтаксиса в админке и постах

Средства направленные на улучшение восприятия и упрощения редактирования синтаксиса в админке и постах. Advanced Code Editor Пожалуй, самый популярный плагин для подсветки кода в админке (80 000 установок), при редактировании Читать далее »

Настройки сайта с theme customizer

Настройки сайта с theme customizer

Для того чтобы некоторые настройки сайта можно было менять из админки, через специальный интерфейс, а не ковырять исходный код (для заказчика), нужно использовать возможности WP Theme Customizer.Можно настраивать, например, такие Читать далее »

/
Заглушка для сайта

Заглушка для сайта

Во время разработки / тех.обслуживания / тестинга нужно вставить код в functions После этого сайт смогут видеть только зашедшие под учеткой администратора пользователи. Альтернативный вариант, прямо в шаблон HEADER Индивидуализация Читать далее »

/

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

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

Настраиваем панель редактирования записей Настраиваем панель редактирования записей
Открывать запись во всплывающем окне
Рекомендации для васОткрывать запись во всплывающем окнеOpttour.ru
Спасибо! Наш менеджер свяжется с Вами в течении 5 минут.