На днях, на одну из статей этого блога один из комментаторов (вероятно, в плане рекламы) поделился ссылкой на сайт, в одной из статей которого рассказывалось о том, как добавить колонку миниатюры в раздел “Все записи” в админке (ссылка ниже)?
Меня тема заинтересовала… я перешёл, посмотрел… решение понравилось (часть кода плагина): достаточно простое в реализации – я этот код протестировал, кое-что подправил, добавил… снабдил полезными комментариями… и решил поделиться со своими читателями, может кому пригодится. Надеюсь, комментатор не обидится))
В статье два варианта: 1 – миниатюру прямо в разделе “все записи” возможно редактировать: удалять, изменять… и 2: добавляется колонка “картинка” только в качестве информации. Ну, ладно: подробнее давайте…
вот на этой статье как добавить
Добавляем информационные колонки в админку: id рубрик, меток, постов, страниц информационные колонки в админку: id рубрик, меток, постов, страниц комментатор поделился своим открытием (там и ссылка).
Как быстро наполнять сайт на Вордпресс – используем плагины.
добавляем миниатюру в раздел записи – в админку
…с возможностью редактирования: то есть сможем прямо в разделе всех записей удалить… изменить картинку соответствующей статьи через “родной” загрузчик WP.
шаг: 1
создаём такой thumbnail.php
файл в ядре темы;
вот код файла: (напоминаю: в коде я добавил кое-какие настройки и снабдил всё это важными комментариями – размер миниатюр и т.п.)
<?php /** * WPSL_Thumb Class * This class is responsible for creating a new column for editing a thumbnail from the general list of posts * Этот класс отвечает за создание нового столбца для редактирования эскиза из общего списка записей * @author Daniel Pataki * @forked Yan Alexandrov */ if ( ! defined( 'ABSPATH' ) ) exit; if ( !is_admin() ) return; new WPSL_Thumb; class WPSL_Thumb { /** Class Constructor */ public function __construct() { add_action( 'init', array( $this, 'admin_list_modifications' ), 99 ) ; add_filter( 'admin_head', array( $this, 'add_styles' ) ); add_action( 'admin_enqueue_scripts', array( $this, 'enqueue_assets' ) ); add_action( 'admin_print_footer_scripts', array( $this, 'add_scripts' ) ); } /** Post types */ public function post_types() { //$post_types = get_post_types( array( 'public' => true ) ); $post_types = array( 'post', 'product' ); return $post_types; } /** * Modify Admin Lists - Изменение Списков Администраторов * This function adds the custom columns and column - функция добавляет пользовательские строки и столбцы * content to the admin tables. Normally we would not - содержимое таблиц администратора. Нормально мы ненужно сделать это внутри функции, подключенной к init. * need to do this inside a function hooked to init. */ public function admin_list_modifications() { $post_types = $this->post_types(); foreach( $post_types as $post_type ) { add_filter( 'manage_edit-' . $post_type . '_columns', array( $this, 'table_head' ), 20 ); add_action( 'manage_' . $post_type . '_posts_custom_column', array( $this, 'column_content' ), 10, 2 ); } } /** * Enqueue Assets * Connect a standard media library to add a thumbnail through it - Подключаем стандартную медиатеку, чтобы добавить миниатюру через нее * @param string $page The name of the page we're on */ public function enqueue_assets( $page ) { if ( 'edit.php' != $page ) { return; } wp_enqueue_media(); } /** * Custom Column Headers * This function adds the custom column we need. It is added to the beginning * by splitting the original array - Эта функция добавляет требуемый пользовательский столбец. тот добавляется в самое начало путем разбиения исходного массива... * @param array $columns The columns contained in the post list * @return array The final array of columns to use */ public function table_head( $columns ) { $new['_post_thumbnail'] = '<i class="dashicons dashicons-format-gallery"></i><span class="dashicons-gallerys">миниатюра</span>'; // заменим иконку столбца $columns = array_merge( array_slice( $columns , 0, 1 ), $new, array_slice( $columns , 1 ) ); return $columns; } /** * Fill column with thumbnail * This function is responsible for generating the content of our columns. It * outputs the image, the links that launch the media uploader and the remove * image link - а эта функция отвечает за генерацию содержимого наших столбцов. Она выводит изображение, ссылки, запускающие загрузчик мультимедиа, и ссылку на удаление изображения * @param $column string */ public function column_content( $column_slug, $post_id ) { if ( '_post_thumbnail' == $column_slug ) { $nonce = wp_create_nonce( "set_post_thumbnail-" . $post_id ); $no_image = ( has_post_thumbnail( $post_id ) ) ? '' : 'no-image'; // задаём размер миниатюры $fill = has_post_thumbnail( $post_id ) ? '<img width="73" height="73" class="attachment-thumbnail wp-post-image" src="' . get_the_post_thumbnail_url( $post_id, 'thumbnail' ) . '" alt="">' : '<i class="dashicons dashicons-plus"></i>'; ?> <div class="wpsl-thumb <?php echo $no_image; ?>" style="opacity: 0;"> <div class="image-box"> <a class="choose-image" data-nonce="<?php echo $nonce; ?>" href="<?php echo get_edit_post_link( $post_id ); ?>"><?php echo $fill; ?></a> </div> <a href="<?php echo get_edit_post_link( $post_id ); ?>" data-nonce="<?php echo $nonce; ?>" class="remove-image"><i class="dashicons dashicons-no"></i></a> </div> <? } } // Add scripts only on product list public function add_scripts() { if ( current_user_can( 'edit_posts' ) && in_array( get_current_screen()->post_type, $this->post_types() ) ) { ?> <script> (function( $ ) { 'use strict'; // global wp, console var file_frame, post_id, nonce, wpsl_thumb; jQuery(document).on('click', '.choose-image', function( event ){ post_id = $(this).parents('tr:first').attr('id').replace( 'post-', '' ); nonce = $(this).data('nonce'); wpsl_thumb = $(this).parents( '.wpsl-thumb' ); /* If an instance of file_frame already exists, then we can open it rather than creating a new instance - если file_frame уже существует, то мы просто открываем его, а не создаём новый */ if ( undefined !== file_frame ) { file_frame.open(); return false; } /** * If we're this far, then an instance does not exist, so we need to * create our own - Если file_frame не существует - создаём свой собственный. * Here, use the wp.media library to define the settings of the Media * Uploader implementation by setting the title and the upload button * text. We're also not allowing the user to select more than one image - используйте wp.медиа-библиотека для определения настроек реализации загрузчика мультимедиа путем установки заголовка и текста * кнопки загрузки. Запрещаем пользователю выбирать более одного изображения */ file_frame = wp.media.frames.file_frame = wp.media({ title: '<?php _e( 'Browse or upload an image', 'plugin_name' ); ?>', button: { text: '<?php _e( 'Set thumbnail', 'plugin_name' ); ?>' }, multiple: false }); /* Setup an event handler for what to do when an image has been selected - Настройка обработчика событий для того, что делать, когда изображение было добавлено */ file_frame.on( 'select', function() { var image_data = file_frame.state().get( 'selection' ).first().toJSON(); var thumbnail = image_data.sizes.thumbnail; if( wpsl_thumb.hasClass( 'no-image' ) ) { wpsl_thumb.removeClass( 'no-image' ); var link = wpsl_thumb.find('a.choose-image'); link.html('').clone().insertAfter(link); var thumbnail_image = $('<img>').attr({ width: thumbnail.width, height : thumbnail.height, class : 'attachment-thumbnail wp-post-image', src : thumbnail.url, alt : image_data.alt }) wpsl_thumb.find('a.choose-image:first').html( thumbnail_image ); } else { wpsl_thumb.find('.attachment-thumbnail').attr( 'src', thumbnail.url ); } $.post( ajaxurl, { _ajax_nonce: nonce, post_id : post_id, thumbnail_id : image_data.id, action: 'set-post-thumbnail' }) }); // Now display the actual file_frame file_frame.open(); return false; }); $(document).on( 'click', '.remove-image', function() { wpsl_thumb = $(this).parents( '.wpsl-thumb' ); nonce = $(this).data('nonce'); var url = $(this).attr('href'); var post_id = parseInt( wpsl_thumb.parents('tr:first').attr('id').replace( 'post-', '' ) ); wpsl_thumb.addClass( 'no-image' ); var choose_image = $('<a>').attr({ href : url, 'data-nonce' : nonce, class : 'choose-image' }).html("<i class='dashicons dashicons-plus'></i></a>") wpsl_thumb.find('.image-box').html(choose_image); $.post( ajaxurl, { _ajax_nonce: nonce, post_id : post_id, thumbnail_id : -1, action: 'set-post-thumbnail' }) return false; }) })( jQuery ); </script> <?php } } /** Add scripts only on product list */ public function add_styles() { if ( current_user_can( 'edit_posts' ) && in_array( get_current_screen()->post_type, $this->post_types() ) ) { echo '<style>'; echo ' .manage-column.column-_post_thumbnail{width:73px;/*43px*/text-align:center;} ._post_thumbnail.column-_post_thumbnail{overflow:visible;} .wpsl-thumb{position:relative;opacity:1 !important;} .wpsl-thumb:hover .remove-image{display:block;} .wpsl-thumb .image-box a{float:left;} .wpsl-thumb .image-box a img {max-width:73px;/*43px*/max-height:73px;/*43px*/float:left;} .wpsl-thumb.no-image a.choose-image{display:block;height:73px;/*43px*/width:73px;/*43px*/border:1px dashed #e1e1e1;text-align:center;background-color:#fff;padding:9px 0;box-sizing:border-box;color:#e1e1e1; -webkit-transition:all .1s ease-in;-moz-transition:all .1s ease-in;transition:all .1s ease-in;} .wpsl-thumb.no-image a.choose-image:hover {color:#0074a2;border-color:#0074a2;} .wpsl-thumb.no-image a.choose-image .dashicons {transition:none;-webkit-transition:none;font-size:30px;width:73px;/*30px*/height:73px;/*30px*/} .wpsl-thumb.no-image .remove-image{display:none;} .wpsl-thumb .remove-image{position:absolute;right:0;top:0;font-size:11px;color:#aaa;display:none;background-color:#ff0000;} .wpsl-thumb .remove-image:hover{background-color:#da0909;} .wpsl-thumb .remove-image .dashicons{font-size:22px;/*10px*/width:26px;/*16px*/height:26px;/*16px*/float:left;line-height:22px;/*16px*/color:#fff;} .dashicons-gallerys{display:none;} '; echo '</style>'; } } }
…помещаем созданный файл в какую-то папку активного шаблона и подключаем документ в functions.php
…а ещё, как логичный вариант, возможно организовать всё это дело в отдельный собственный плагин – как это запросто сделать, описано в этом посте: как создать свой плагин
Создаём свой плагин — например, отдельный файл функций для сайта my-functions.php – весьма и весьма целесообразнее для организации сайта?
или:
как разбить functions.php
functions.php — как разбить на отдельные функциональные части, файлы: очень удобно в плане наполнения файла различными кодами! на отдельные функциональные части, файлы.?.
Подключать в теме созданный файл (файлы вообще) можно таким вариантом:
//теме:
require_once get_template_directory() . '/имя-папки/thumbnail.php';
//Или в плагине:
//require( plugin_dir_path( __FILE__ ) . 'имя/thumbnail.php' );
добавляем отображение миниатюры в разделе записи – в админке
Для тех админов, которые желают просто добавить колонку “Миниатюра” в раздел все записи в админке, чтобы тут же видеть, что за картинка добавлена для страницы, записи..?
миниатюры будут просто отображаться в разделах записи и страницы! – без возможности редактирования! Только для информации о картинке (миниатюре) записи, странице…
добавим к себе ф фалы темы такой код: код абсолютно рабочий, в принципе не требует никаких настроек – как только код будет добавлен в файлы своего сайта – всё ту же заработает – в разделах записей, страниц появится новая колона “картинка”.
В коде даны комментарии к вариантам вывода, например the_post_thumbnail
…
/* колонка "миниатюры" в списке записей и страниц */
// GET FEATURED IMAGE - подключаем изображение...
function ats_get_featured_image($post_ID) {
$post_thumbnail_id = get_post_thumbnail_id($post_ID);
if ($post_thumbnail_id) {
$post_thumbnail_img = wp_get_attachment_image_src($post_thumbnail_id, 'featured_preview');
return $post_thumbnail_img[0];
} }
add_filter('manage_posts_columns', 'ats_columns_head');
add_action('manage_posts_custom_column', 'ats_columns_content', 10, 2); // раздел ЗАПИСИ
add_filter('manage_pages_columns', 'ats_columns_head');
add_action('manage_pages_custom_column', 'ats_columns_content', 10, 2); // раздел СТРАНИЦЫ
// ADD NEW COLUMN - новая колонка
function ats_columns_head($defaults) {
$defaults['featured_image'] = 'картинка'; // Featured Image
return $defaults;
}
// SHOW THE FEATURED IMAGE - ПОКАЗАТЬ ИЗОБРАЖЕНИЕ
function ats_columns_content($column_name, $post_ID) {
if ($column_name == 'featured_image') {
$post_featured_image = ats_get_featured_image($post_ID);
if ($post_featured_image) {
//echo '<img src="' . $post_featured_image . '" />';
echo the_post_thumbnail(array(125,80)); // вариант подключения картинки thumbnail - задаём размеры картинки
} } }
/* колонка "миниатюры" в списке записей и страниц */
миниатюры в разделе записи, страницы в админке – итог
в финале работ, если выбрали какой-то из описанных выше способов и внедрили нужный код к себе в файлы сайта, в админке – в разделе записи, страницы (опция “Настройки экрана”)
…получится так, как на картинке ниже: появятся новые чекбоксы…
Спасибо, за внимание… надеюсь кому-то пригодится этот мой рассказ.
...город веб мастеров Михалика.ru © - запросто с WordPress - ATs media squad
mihalica.ru !