Запретить использование WordPress для обрезки GIF-файлов

Есть ли способ предотвратить использование файлов обрезки WordPress на основе их расширения файла. На самом деле, я хочу отключить обрезку для файлов GIF, потому что после обрезки изображения GIF ...

  1. Изображение GiF не остается анимированным.
  2. Даже он остается анимированным, я не буду использовать эти небольшие размеры GIF.

Итак, есть ли способ отключить создание миниатюр (для GIF) на основе того, какое расширение файла имеет изображение.

5 голосов | спросил Robert hue 24 thEurope/Moscowp30Europe/Moscow09bEurope/MoscowWed, 24 Sep 2014 15:08:42 +0400 2014, 15:08:42

1 ответ


6

Отменять размеры обычно можно легко с помощью 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;
}
ответил Nicolai 24 thEurope/Moscowp30Europe/Moscow09bEurope/MoscowWed, 24 Sep 2014 17:53:38 +0400 2014, 17:53:38

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132