加上一个精细的全局变量($_wp_additional_image_sizes
) 此处显示:How to get a list of all the possible thumbnail sizes set within a theme, 让我们了解捕获“的代码”;“用作特色图像”;操作单击。
该代码在每个;“用作特色图像”;点击然后,它检查并删除所有额外的图像大小,保留默认的WordPress大小(缩略图、中、大)
测试此代码throughly在上线之前
GPL代码。未授予保修。检查注释
/**
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
}
上载图像后的结果文件夹内容,尚未设置特征图像
设置后的文件夹内容fondo-restauraciones
作为特色图片
其他注意事项要处理所有额外的图像大小(WordPress默认值和自定义),请使用:
$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\'
)
*/