Intereting Posts
403 Запрещенная ошибка на субдомене Кто-нибудь знает плагин для WordPress, который использует osCommerce? Помогите перейти от joomla к wordpress Предупреждение об ошибке: Объявление описания_walker :: start_el после обновления PHP Если скрипт был установлен в очередь, но не зарегистрирован, я могу его удалить? страница архива типа постпользователя имеет ошибку 404, хотя has_archive истинна Размеры объектов изображения ACF на многоузловом Невозможно включить файл в дочернюю тему Проблема WordPress Ajax Data Проверьте, есть ли тег, категория или автор в файле archive.php Как получить список вспомогательных блогов без использования get_blog_list ()? WordPress продолжает усекать мои каналы, и я не могу его остановить Могу ли я использовать настраиваемый тип сообщений в качестве пользовательской таксономии для другого настраиваемого типа сообщений? WordPress для разработки технической документации? wp_nav_menu список детей, если на родительской странице, но родной, если на странице родного брата

Получите список всех размеров изображения, которые соответствуют соотношению сторон оригинала

Мне нужна такая же функциональность, как и метод WordPress wp_calculate_image_srcset() который возвращает строку для srcset:

 image-300x200.jpg 300w, image-600x400.jpg 600w, ... 

но он должен возвращать массив вместо строки, со структурой, подобной:

 $image_sizes = array( array( 'url' => 'image-300x200.jpg', 'width' => 300, 'height' => 200 ), array( 'url' => 'image-600x400.jpg', 'width' => 600, 'height' => 400 ), array( 'url' => 'image.jpg', 'width' => 1200, 'height' => 800 ) ); 

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

Источник wp_calculate_image_srcset кажется сложным и использует несколько «_private» методов.

wp_calculate_image_srcset также использует фильтр max_srcset_image_width (который ограничивает максимальный размер изображения), и мне нужно как-то его избежать. Is remove_filter -> метод execute -> add_filter единственный способ пропустить его?

Edit: Я закончил это делать (если это плохая идея – сообщите мне):

 class MyClass { public $image_items; function __construct() { add_filter('wp_calculate_image_srcset', array($this, 'filter_my_srcset'), 10, 5); wp_calculate_image_srcset( ... ); remove_filter('wp_calculate_image_srcset', array($this, 'filter_my_srcset')); // print_r( $this->image_items ); } public function filter_my_srcset( $source, ... ) { $this->image_items = $source; return $source; } } 

Solutions Collecting From Web of "Получите список всех размеров изображения, которые соответствуют соотношению сторон оригинала"

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

Для проблем с фильтром:

Вы можете передать третий параметр в $size_array . WP просто рассмотрит первые два значения. Если вы вызываете функцию, подобную этой …

 wp_calculate_image_srcset( [600, 400, 'wpse_281968'], … ) 

… вы можете искать это значение при фильтрации max_srcset_image_width .

 add_filter( 'max_srcset_image_width', function( $max, array $sizes ) { if ( ! empty ( $sizes[2] ) && 'wpse_281968' === $sizes[2] ) return PHP_INT_MAX; return $max; }, 10, 20); 

Да, это взломать. Но он будет работать до тех пор, пока WP не будет использовать третью запись массива здесь. Следите за источником WP. 🙂

И тогда я бы отфильтровал wp_calculate_image_srcset (с приоритетом - PHP_INT_MAX для запуска в первую очередь) и извлек из него источники. Это массив и, вероятно, немного легче разобрать, чем строку, возвращаемую функцией.

Замечание сторон. Пожалуйста, не регистрируйте обратные вызовы для крючков в конструкторе . 🙂