Intereting Posts
Преобразование всех дат, хранящихся в настраиваемом поле Как дезинфицировать стоимость почтового метаполя? Иметь домашнюю страницу выглядят иначе, чем index.php без статической страницы не удалось показать персонализированное изображение типа персонализированного сообщения Ограничить get_pages, чтобы показывать только 5 элементов Размещение рекламы после каждого 10-го сообщения с бесконечным прокруткой Список Сообщений Для условий пользовательской таксономии для любого типа сообщения перевести кнопку «загрузить больше» Выбор боковой панели из создания страницы Событие Wp cron установлено, но функция не запускается Текстовый редактор WP изменяет разметку html Использование meta_query в add_query_arg Добавить родителя в список подстраниц Как получить $ tag для добавления в add_action () или add_filter ()? Как получить nav_menu_item_id и slug из базы данных wp

Условные размеры изображения для использования с помощью настройки пользовательского режима

Я ищу способ добавления размеров изображений, которые генерируются только при загрузке, происходящих в Настройке темы, любых предложений или указаний относительно того, как это можно сделать?

Я уже работал с фильтром middle_image_sizes_advanced, который дает мне изображения, которые я хочу, проблема в том, что они не отображаются в медиабиблиотеке, поэтому они не могут быть удалены пользователем. Это для многосетевой сети, поэтому я не хочу создавать бесконечное накопление изображений, которые пользователи не могут получить для очистки, и создать ситуацию, когда системный администратор не знает, какие изображения должны быть удалены и не использовать.

Вот текущий код, который не работает просто потому, что фильтр intermediate_image_sizes_advanced не add_image_size() эти новые размеры так же, как это add_image_size() , и поэтому они становятся «потерянными», как я упоминал выше.

 add_filter('intermediate_image_sizes_advanced','responsive_customizer_bg_images'); function responsive_customizer_bg_images( $image_sizes ){ // quit if the theme is not pure - only PURE gets responsive images, add new themes with responsive images here if ( ! isset( $_POST['post_data'] ) ) { return false; } else { if ( $_POST['post_data']['theme'] != 'pure' ) return false; } $sizes = array( '1024' => array( 'width' => 1024, 'height' => 768, 'crop' => true, ), '1680' => array( 'width' => 1680, 'height' => 1050, 'crop' => true, ), '2560' => array( 'width' => 2560, 'height' => 1440, 'crop' => true, ), ); $image_sizes = []; $custom_sizes = []; foreach ($sizes as $key => $value) { $image_sizes[ 'artsite-bg-' . $value['width'] . 'x' .$value['height'] ] = array( 'width' => $value['width'], 'height' => $value['height'], 'crop' => $value['crop'] ); $custom_sizes[] = array( 'artsite-bg-' . $value['width'] . 'x' .$value['height'] => __('Background ' . $value['width'] . 'x' .$value['height'] ) ); } return $image_sizes; } 

EDIT – для чего это стоит, этот вопрос решает подобную проблему, однако OP не пытается заглядывать в $_POST как я, чтобы определить, поступает ли входящая загрузка из Customizer или нет: добавьте пользовательские размеры изображений в загрузчик мультимедиа

EDIT 2 – вот веселая версия, которая создает бесконечный цикл, в котором каждое отзывчивое изображение вставлено в виде вложения в конце, в свою очередь, заставляя функцию запускать себя и создавать бесконечный цикл. Есть ли другой крюк, который я мог бы захватить, чтобы избежать цикла самозапускания?

 add_filter('add_attachment','generate_responsive_sizes'); function generate_responsive_sizes( $attachment_id ) { $image_post_data = get_post( $attachment_id ); error_log(print_r($image_post_data,true)); // quit if the post_type is not attachment and mime_type is not jpeg/jpg/gif if ( $image_post_data->post_type != 'attachment' || $image_post_data->post_mime_type != ( 'image/jpeg' || 'image/png' || 'image/gif' ) ) return false; // quit if the theme is not pure - only PURE gets responsive images, add new themes with responsive images here if ( ! isset( $_POST['post_data'] ) ) { return false; } else { if ( $_POST['post_data']['theme'] != 'pure' ) return false; } $upload_dir = wp_upload_dir(); $file = substr( strrchr( $image_post_data->guid, '/' ), 1 ); $filepath = $upload_dir['path'] . '/' . $file; $file_arr = preg_split( '/\./', $file ); $filename = $file_arr[0]; $file_ext = $file_arr[1]; error_log(print_r($upload_dir,true)); $sizes = array( '1024' => array( 'width' => 1024, 'height' => 768, 'crop' => true, ), '1680' => array( 'width' => 1680, 'height' => 1050, 'crop' => true, ), '2560' => array( 'width' => 2560, 'height' => 1440, 'crop' => true, ), ); $new_sizes_generated = []; // first create the images if ( ! is_wp_error( $image_post_data ) ) { foreach ($sizes as $key => $value) { $image = wp_get_image_editor( $filepath ); $new_img_filepath = $upload_dir['path'] . '/' . $filename . '-' . $value['width'] . 'x' . $value['height'] . '.' . $file_ext; error_log(print_r($value,true)); error_log(print_r($image,true)); error_log(print_r($new_img_filepath,true)); $dimensions = $image->get_size(); // if the image new size is not bigger than the original, we will // continue and not save a new version of this image if ( $dimensions['width'] < $value['width'] && $dimensions['height'] < $value['height'] ) { continue; } $image->resize( $value['width'], $value['height'], $value['crop'] ); $image->save( $new_img_filepath ); } } // now attach them, we do this separately to avoid an infinite loop of files added, // which in turn triggers this entire function from start, since it's hooked to // `add_attachment`. if ( ! is_wp_error( $image_post_data ) ) { foreach ($sizes as $key => $value) { $new_img_filepath = $upload_dir['path'] . '/' . $filename . '-' . $value['width'] . 'x' . $value['height'] . '.' . $file_ext; // Check for existence of an attachment with the same GUID to avoid // infinite loop as noted at the opening of the above foreach loop global $wpdb; $prefix = $wpdb->prefix; $attachment = $wpdb->get_col($wpdb->prepare("SELECT ID FROM " . $prefix . "posts" . " WHERE guid='%s';", $new_img_filepath )); if ( ! empty( $attachment ) ) { error_log(print_r('there already is an attachment for ' . $new_img_filepath, true )); return false; } else { error_log(print_r('there is NO attachment for ' . $new_img_filepath, true )); $wp_filetype = wp_check_filetype(basename($new_img_filepath), null ); error_log(print_r($wp_filetype,true)); $attachment = array( 'guid' => $new_img_filepath, 'post_mime_type' => $wp_filetype['type'], 'post_title' => preg_replace('/\.[^.]+$/', '', basename($new_img_filepath)), 'post_content' => '', 'post_status' => 'inherit' ); error_log(print_r($attachment,true)); wp_insert_attachment( $attachment, $new_img_filepath, 37 ); } } } } 

Solutions Collecting From Web of "Условные размеры изображения для использования с помощью настройки пользовательского режима"