Запретить WordPress обрезать GIF-файлы
Есть ли какой-либо способ запретить WordPress обрезать файлы на основе их расширения. На самом деле, я хочу отключить обрезку для GIF-файлов, потому что после обрезки GIF-изображения...
- GIF-изображение не остается анимированным
- Даже если он останется анимированным, я не буду использовать эти маленькие размеры GIF.
Итак, есть ли способ отключить создание миниатюр (для GIF) в зависимости от того, какое расширение файла имеет изображение.
1 answers
Изменение размеров обычно легко выполняется с помощью крючка intermediate_image_sizes_advanced
. Единственная проблема в том, что доступен только массив $sizes
, поэтому этого достаточно для общего уровня, но не в том случае, если вы хотите сделать это условно. Информация, необходимая для этого условно, может быть собрана с помощью debug_backtrace
- debug_backtrace
однако с точки зрения производительности это несколько дорого. В любом случае, я полагаю, что это можно было бы сделать, как показано ниже:
add_action(
'intermediate_image_sizes_advanced',
'wpse162413_unset_sizes_if_gif'
);
function wpse162413_unset_sizes_if_gif( $sizes ) {
// we're only having the sizes available
// we're using debug_backtrace to get additional information
$dbg_back = debug_backtrace();
// scan $dbg_back array for function and get $args
foreach ( $dbg_back as $sub ) {
if ( $sub[ 'function'] == 'wp_generate_attachment_metadata' ) {
$args = $sub[ 'args' ];
}
}
// attachment id
$att_id = $args[0];
// attachment path
$att_path = $args[1];
// split up file information
$pathinfo = pathinfo( $att_path );
// if extension is gif unset sizes
if ( $pathinfo[ 'extension' ] == 'gif' ) {
// get all intermediate sizes
$intermediate_image_sizes = get_intermediate_image_sizes();
// loop trough the intermediate sizes array
foreach ( $intermediate_image_sizes as $size ) {
// unset the size in the sizes array
unset( $sizes[ $size ] );
}
}
// return sizes
return $sizes;
}