Les 'jpeg_quality'fonctions de hook de filtre acceptent deux arguments: $jpeg_qualityet $functionquelle est la fonction de l'intérieur du hook de filtre est déclenchée et peut être soit image_resizeou wp_crop_image. Il n'y a donc aucun moyen de définir sélectivement la qualité des .jpegimages en fonction de la taille de l'image à partir de cette fonction de crochet de filtre.
Cependant, vous pouvez toujours vous accrocher à un crochet d'action ultérieur dans le processus de téléchargement de pièces jointes et ajuster la .jpegqualité d'image des images téléchargées à ce stade en fonction de leur taille spécifique en fonction de vos besoins. Réglez d'abord le jpeg_qualityau maximum pour préserver la qualité de l'image d'origine, puis accrochez-vous au crochet d' added_post_metaaction (qui est déclenché à la fin de l'insertion des métadonnées de pièce jointe) pour ajuster la qualité, comme suit:
// set the quality to maximum
add_filter('jpeg_quality', create_function('$quality', 'return 100;'));
add_action('added_post_meta', 'ad_update_jpeg_quality', 10, 4);
function ad_update_jpeg_quality($meta_id, $attach_id, $meta_key, $attach_meta) {
    if ($meta_key == '_wp_attachment_metadata') {
        $post = get_post($attach_id);
        if ($post->post_mime_type == 'image/jpeg' && is_array($attach_meta['sizes'])) {
            $pathinfo = pathinfo($attach_meta['file']);
            $uploads = wp_upload_dir();
            $dir = $uploads['basedir'] . '/' . $pathinfo['dirname'];
            foreach ($attach_meta['sizes'] as $size => $value) {
                $image = $dir . '/' . $value['file'];
                $resource = imagecreatefromjpeg($image);
                if ($size == 'spalsh') {
                    // set the jpeg quality for 'spalsh' size
                    imagejpeg($resource, $image, 100);
                } elseif ($size == 'spalsh1') {
                    // set the jpeg quality for the 'splash1' size
                    imagejpeg($resource, $image, 30);
                } else {
                    // set the jpeg quality for the rest of sizes
                    imagejpeg($resource, $image, 10);
                }
                // or you can skip a paticular image size
                // and set the quality for the rest:
                // if ($size == 'splash') continue;
                imagedestroy($resource);
            }
        }
    }
}
Le code ci-dessus affectera uniquement les images nouvellement téléchargées. Si vous souhaitez mettre à jour la qualité des images précédemment téléchargées, vous pouvez utiliser register_activation_hookdes plugins. Créez un nouveau fichier php dans le wp-content/pluginsrépertoire et nommez-le comme vous le souhaitez ( update-jpeg-quality.phppar exemple) et ajoutez-lui le code suivant:
<?php
/*
Plugin Name: Update JPEG Quality
Plugin URI: http://wordpress.stackexchange.com/questions/74103/set-jpeg-compression-for-specific-custom-image-sizes
Description: This plugin will change the jpeg image quality according to its size.
Author: Ahmad M
Version: 1.0
Author URI: http://wordpress.stackexchange.com/users/12961/ahmad-m
*/
register_activation_hook(__FILE__, 'ad_modify_jpeg_quality');
function ad_modify_jpeg_quality() {
    $attachments = get_posts(array(
        'numberposts' => -1,
        'post_type' => 'attachment',
        'post_mime_type' => 'image/jpeg'
    ));
    if (empty($attachments)) return;
    $uploads = wp_upload_dir();
    foreach ($attachments as $attachment) {
        $attach_meta = wp_get_attachment_metadata($attachment->ID);
        if (!is_array($attach_meta['sizes'])) break;
        $pathinfo = pathinfo($attach_meta['file']);
        $dir = $uploads['basedir'] . '/' . $pathinfo['dirname'];
        foreach ($attach_meta['sizes'] as $size => $value) {
            $image = $dir . '/' . $value['file'];
            $resource = imagecreatefromjpeg($image);
            if ($size == 'spalsh') {
                // set the jpeg quality for 'spalsh' size
                imagejpeg($resource, $image, 100);
            } elseif ($size == 'spalsh1') {
                // set the jpeg quality for the 'splash1' size
                imagejpeg($resource, $image, 30);
            } else {
                // set the jpeg quality for the rest of sizes
                imagejpeg($resource, $image, 10);
            }
            imagedestroy($resource);
        }
    }
}
?>
Maintenant, visitez votre page Plugins et cliquez sur activatele Update JPEG Qualityplugin. Cela parcourra toutes vos .jpegimages précédemment téléchargées et ajustera leur qualité en fonction des valeurs et des conditions que vous spécifiez dans le plugin. Ensuite, vous pouvez désactiver et supprimer ce plugin en toute sécurité. Veuillez d'abord tester l'environnement de test avant de postuler sur le site de production .