Je m'inquiète du trop grand nombre de fichiers créés lors de l'ajout d'une nouvelle taille d'image.
Tous les fichiers téléchargés généreront la nouvelle taille, J'ai besoin d'une taille d'image spécifique uniquement pour le fichier défini comme image Fetured, existe-t-il un moyen de le faire? .
Les vignettes , moyennes , etc. sont ok, mais il n’est pas nécessaire de créer la nouvelle taille pour chaque fichier.
Je pense que cela devrait fonctionner juste après la définition de l'image sélectionnée.
La question Filtre pour l'image sélectionnée mène à cette réponse: Comment accrocher update_post_meta et delete_post_meta? .
Couplé à la variable globale fine ($_wp_additional_image_sizes
) révélée ici: Comment obtenir une liste de toutes les tailles de vignettes possibles définies dans un thème , amenez-nous au code qui saisit l'action "Utiliser comme image sélectionnée".
Ce code est déclenché à chaque clic "Utiliser comme image sélectionnée". Il passe ensuite en revue toutes les tailles d'image supplémentaires et les supprime, en conservant celles par défaut de WordPress (miniature, moyenne, grande).
Testez ce codede bout en boutavant de devenir LIVE.
Code GPL. Aucune garantie accordée. Vérifiez les commentaires.
/**
DRAWBACK
- Setting the Featured Image can be done ONLY ONCE
-- When first setting the FI, all other attachments intermediate sizes will be deleted
-- If swapping the FI, the first image's remaining intermediate will be deleted, and the second DON'T HAVE any additional intermediates!
TODO: Restoring deleted intermediates
- this post may have an answer: https://wordpress.stackexchange.com/a/8082/12615
*/
add_action( 'added_post_meta', 'wpse_57369_selective_delete_intermediates', 10, 4 );
add_action( 'updated_post_meta', 'wpse_57369_selective_delete_intermediates', 10, 4 );
/**
* Catches the "Used as featured image" action
*/
function wpse_57369_selective_delete_intermediates( $meta_id, $post_id, $meta_key, $meta_value )
{
if ( '_thumbnail_id' == $meta_key )
{
global $_wp_additional_image_sizes;
/**
* The global holds all additional image sizes and contains this:
*
array(
['post-thumbnail'] => array(
['width'] => 1000
['height'] => 288
['crop'] => 1
)
['large-feature'] => array(
['width'] => 1000
['height'] => 288
['crop'] => 1
)
['small-feature'] => array(
['width'] => 500
['height'] => 300
['crop'] =>
)
)
*/
// Populate a new array with single values based on the keys of the global
$all_sizes = array();
foreach ( $_wp_additional_image_sizes as $key => $value )
{
$all_sizes[] = $key;
}
// Retrieve all attachments of current post/page/cpt
$all_attachs = get_children( array(
'post_parent' => $post_id,
'post_type' => 'attachment',
'numberposts' => -1,
'post_mime_type' => 'image'
));
// Determine upload path
$uploads = wp_upload_dir();
$path_pos = strpos( $uploads['basedir'], 'wp-content/' ); // start position of the string
$base_path = substr( $uploads['basedir'], 0, $path_pos); // path before wp-content, e.g., /etc/public_html/
// Loop through all attachments
foreach ( $all_attachs as $key => $value )
{
// This is the featured image
if ( $key == $meta_value)
{
wpse_57369_delete_files( $key, $all_sizes, $base_path, 'small-feature' );
}
// Rest of attached images
else
{
wpse_57369_delete_files( $key, $all_sizes, $base_path, false );
}
}
}
}
/**
* Delete all custom intermediates files, except when $keep_size is defined
*/
function wpse_57369_delete_files( $ID, $all_sizes, $base_path, $keep_size=false )
{
foreach ( $all_sizes as $intermediate )
{
/* We need to know the image url [0] and if it exists [3] */
$the_url = wp_get_attachment_image_src( $ID, $intermediate );
/* If additional image exist, go ahead */
if( $the_url[3] )
{
// Path of the image to be deleted
$url_pos = strpos( $the_url[0], 'wp-content/' );
$url_end = substr( $the_url[0], $url_pos);
// Delete all intermediates
if ( !$keep_size )
{
// loga( $ID . ' - ' . $intermediate, 'delete-me');
unlink( $base_path . $url_end );
}
// Featured image, Selective delete
else
{
// Delete intermediate
if ( $intermediate != $keep_size )
{
// loga( $ID . ' - ' . $intermediate, 'delete-me');
unlink( $base_path . $url_end );
}
// Keep intermediate, no action needed
// PROBABLY, RESTORING AN INEXISTENT IMAGE SIZE MUST BE DONE HERE
else
{
// loga( $ID . ' - ' . $intermediate, 'keep-me');
}
}
}
}
}
function loga()
{
// This is the FireBug FirePHP console call
// http://www.firephp.org/HQ/Use.html
}
Contenu du dossier après le téléchargement _ images, aucune image d'entité n'est encore définie
Contenu du dossier après réglagefondo-restauraciones
en tant qu'image sélectionnée
Pour gérer TOUTES les tailles d’image supplémentaires (valeurs par défaut de WordPress et définies par l'utilisateur), utilisez:
$all_sizes = get_intermediate_image_sizes();
/**
* $all_images contains all intermediate image sizes, WordPress default and declared custom sizes:
*
array(
[0] => 'thumbnail'
[1] => 'medium'
[2] => 'large'
[3] => 'post-thumbnail'
[4] => 'large-feature'
[5] => 'small-feature'
)
*/
Vous pouvez obtenir l'image sélectionnée src
/source en utilisant les arguments suivants sur la fonction principale (où $post
doit être appelé avec global $post
devant):
wp_get_attachment_image_src( get_post_thumbnail_id( $post->ID ), 'single-post-thumbnail' );
J'ai écrit un free plugin disponible sur GitHub , appelé "Dynamic Image Resize".
Vous pouvez le télécharger et l'utiliser gratuitement.
Placez [dynamic_image]
dans votre contenu. Le shortcode a quatre arguments:
src
Chemin d'accès complet à l'image dans votre répertoire de téléchargement ou à l'IDwidth
Valeur entièreheight
Valeur entièreclasses
Css classes - séparées par un espace… Mais il y a aussi un:
global $post;
// Use the template tag with ID *OR* full path
dynamic_image_resize( array(
// The full path to the image in your uploads folder
'src' => wp_get_attachment_image_src( get_post_thumbnail_id( $post->ID ), 'single-post-thumbnail' );
// OR: the ID
'src' => get_post_thumbnail_id( $post->ID )
,'width' => 60
,'height' => 100
,'classes' => 'some classes to align and style the image'
) );
Il suffit de le déposer dans votre modèle là où vous en avez besoin et de terminer.
Remarque: Il est basé sur une idée/proposition de Konstantin Kovshenin.
Sidenote:
Si vous souhaitez ignorer/désactiver les tailles d'image par défaut, ajoutez simplement 0
en tant que width
et height
dans les paramètres d'administration.