web-dev-qa-db-fra.com

Suppression des tailles d'image pour le type de publication personnalisé

J'essaie d'y parvenir sans utiliser de plugin, mais actions et filtres

Existe-t-il un moyen de supprimer les tailles d’image supplémentaires générées par WordPress en fonction du type de message personnalisé? J'ai essayé de travailler avec le filtre intermediate_image_sizes_advanced mais il ne semble pas qu'il ait accès à $post ou post_type. Donc, j'utilise la fonction comme suit:

function filter_image_sizes($sizes) {
    global $post;
    global $post_type;

    if($post->post_type == 'cpt_slides' || $post_type == 'cpt_slides'){
        unset( $sizes['thumbnail']);
        unset($sizes['medium']);
        unset( $sizes['large']);
    }

    return $sizes;
}
add_filter('intermediate_image_sizes_advanced', 'filter_image_sizes');

Le Raisonnement/Situation

J'ai créé un type de publication personnalisé de diapositives (semblable à un curseur d'image) qui utilise l'image sélectionnée pour permettre à l'utilisateur de télécharger des "diapositives". J'ai également quelques tailles d'image personnalisées, mais une spécifiquement pour les diapositives. Étant donné que les images de diapositives auront une taille statique, je ne souhaite pas que WordPress génère toutes ces tailles d’images supplémentaires que je n’utiliserai jamais, d’où la question.

2
Howdy_McGee

Peut-être que ce filtre devrait fonctionner intermediate_image_sizes

Remarque:Cette solution fonctionnera si vous téléchargez une image à partir de l'écran de modification. (testé sur localhost avec WP-3.8.1)

add_filter( 'intermediate_image_sizes', 'ravs_slider_image_sizes', 999 );
function ravs_slider_image_sizes( $image_sizes ){

    // size for slider
    $slider_image_sizes = array( 'your_image_size_1', 'your_image_size_2' ); 

    // for ex: $slider_image_sizes = array( 'thumbnail', 'medium' );

    // instead of unset sizes, return your custom size for slider image
    if( isset($_REQUEST['post_id']) && 'your_custom_post_type' === get_post_type( $_REQUEST['post_id'] ) )
        return $slider_image_sizes;

    return $image_sizes;
}
8
Ravinder Kumar

Une partie du problème peut provenir du fait que ce filtre pourrait être appelé à partir de plusieurs emplacements, ou peut-être d'un endroit où aucune publication n'est associée à la requête. En fait, le filtre utilisé ne semble être utilisé que lorsque la pièce jointe est créée pour la première fois dans les métadonnées.

Un peu de test me montre que lorsque je télécharge une image, les variables $ post et $ post_type ne sont pas définies à l'emplacement où ce filtre est utilisé. Cela est probablement dû au fait que le téléchargement de contenu multimédia est effectué en arrière-plan via JavaScript au lieu de Envoyer un formulaire, puis de recharger la page.

WordPress n'est pas du tout configuré pour gérer ce type de filtrage, c'est peut-être quelque chose qui devrait être pris en compte pour les futures mises à jour, je suggérerais de soumettre un ticket au WordPress Trac et d'obtenir des conseils.

Fondamentalement, WordPress stocke vos éléments multimédias indépendamment de la publication à laquelle ils peuvent être attachés, de sorte que vous puissiez facilement utiliser le même fichier à plusieurs endroits. Si WordPress vous permettait d'ajuster les tailles générées sur une base plus granulaire, vous pourriez vous retrouver dans des situations où vous téléchargiez une image pour un article de blog et que vous souhaitiez ensuite réutiliser cette image ailleurs en tant qu'image sélectionnée. La médiathèque est configurée pour gérer ce genre de choses, mais elle ne permet pas de régénérer les vignettes au cas par cas, elle est générée de manière à générer toutes les vignettes requises, car vous pouvez utiliser n'importe laquelle des vignettes ailleurs.

Le moyen le plus simple de gérer cela consiste à utiliser votre propre fonction de téléchargement de média pour la metabox du type de publication personnalisée lors du téléchargement de média. Cela vous permettrait de contourner le processus normal de miniatures WordPress et de ne créer que les tailles souhaitées lors du téléchargement du fichier. Voici un excellent tutoriel qui vous aidera dans ce processus: http://wp.tutsplus.com/tutorials/attaching-files-to-your-posts-using-wording-word-met-boxes-part-1/

0
Nullvariable