Для различных целей мы можем настраивать вид и функционал админ части сайта. Выводить дополнительные поля, таксономии, сортировать по этим данным, а также оформлять элементы управления.
Миниатюра в панели редактирования
Добавим код в 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 );
Добавляем цвета к статусам
// Цвета строк записей в зависимости от статуса add_action( 'admin_footer', 'admin_footer_example' ); function admin_footer_example() { echo '<style type="text/css"> .status-draft { background-color: #FCE3F2 !important; } .status-pending { background-color: #87C5D6 !important; } .status-future { background-color: #C6EBF5 !important; } .status-private { background-color: #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>';} }
Добавить колонку с пользовательским полем (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->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’) можно выводить фильтр по любой таксономии.
Массовое изменение категорий
Массово добавить записям категории возможно, а вот удалить нет. Если требуется отредактировать (в т.ч. какие-то удалить) массово категории у записей — нужно воспользоваться плагином Mass set Categories (300+).
Тэги: админка