首先,我知道单独使用插件比在函数中集成插件更好。php,但这是用于将部署到多个站点的主题框架,并且将其打包为主题的一部分会更容易。
我在使用位于此处的插件中的以下代码时遇到问题。我的PHP知识有限,我曾尝试直接复制和粘贴代码,但不起作用,但作为插件使用时效果很好。
class Filosofo_Custom_Image_Sizes {
public function __construct()
{
add_filter(\'image_downsize\', array(&$this, \'filter_image_downsize\'), 99, 3);
}
/**
* Callback for the "image_downsize" filter.
*
* @param bool $ignore A value meant to discard unfiltered info returned from this filter.
* @param int $attachment_id The ID of the attachment for which we want a certain size.
* @param string $size_name The name of the size desired.
*/
public function filter_image_downsize($ignore = false, $attachment_id = 0, $size_name = \'thumbnail\')
{
global $_wp_additional_image_sizes;
$attachment_id = (int) $attachment_id;
$size_name = trim($size_name);
$meta = wp_get_attachment_metadata($attachment_id);
/* the requested size does not yet exist for this attachment */
if (
empty( $meta[\'sizes\'] ) ||
empty( $meta[\'sizes\'][$size_name] )
) {
// let\'s first see if this is a registered size
if ( isset( $_wp_additional_image_sizes[$size_name] ) ) {
$height = (int) $_wp_additional_image_sizes[$size_name][\'height\'];
$width = (int) $_wp_additional_image_sizes[$size_name][\'width\'];
$crop = (bool) $_wp_additional_image_sizes[$size_name][\'crop\'];
// if not, see if name is of form [width]x[height] and use that to crop
} else if ( preg_match(\'#^(\\d+)x(\\d+)$#\', $size_name, $matches) ) {
$height = (int) $matches[2];
$width = (int) $matches[1];
$crop = true;
}
if ( ! empty( $height ) && ! empty( $width ) ) {
$resized_path = $this->_generate_attachment($attachment_id, $width, $height, $crop);
$fullsize_url = wp_get_attachment_url($attachment_id);
$file_name = basename($resized_path);
$new_url = str_replace(basename($fullsize_url), $file_name, $fullsize_url);
if ( ! empty( $resized_path ) ) {
$meta[\'sizes\'][$size_name] = array(
\'file\' => $file_name,
\'width\' => $width,
\'height\' => $height,
);
wp_update_attachment_metadata($attachment_id, $meta);
return array(
$new_url,
$width,
$height,
true
);
}
}
}
return false;
}
/**
* Creates a cropped version of an image for a given attachment ID.
*
* @param int $attachment_id The attachment for which to generate a cropped image.
* @param int $width The width of the cropped image in pixels.
* @param int $height The height of the cropped image in pixels.
* @param bool $crop Whether to crop the generated image.
* @return string The full path to the cropped image. Empty if failed.
*/
private function _generate_attachment($attachment_id = 0, $width = 0, $height = 0, $crop = true)
{
$attachment_id = (int) $attachment_id;
$width = (int) $width;
$height = (int) $height;
$crop = (bool) $crop;
$original_path = get_attached_file($attachment_id);
// fix a WP bug up to 2.9.2
if ( ! function_exists(\'wp_load_image\') ) {
require_once ABSPATH . \'wp-admin/includes/image.php\';
}
$resized_path = @image_resize($original_path, $width, $height, $crop);
if (
! is_wp_error($resized_path) &&
! is_array($resized_path)
) {
return $resized_path;
// perhaps this image already exists. If so, return it.
} else {
$orig_info = pathinfo($original_path);
$suffix = "{$width}x{$height}";
$dir = $orig_info[\'dirname\'];
$ext = $orig_info[\'extension\'];
$name = basename($original_path, ".{$ext}");
$destfilename = "{$dir}/{$name}-{$suffix}.{$ext}";
if ( file_exists( $destfilename ) ) {
return $destfilename;
}
}
return \'\';
}
}
function initialize_custom_image_sizes()
{
new Filosofo_Custom_Image_Sizes;
}
add_action(\'plugins_loaded\', \'initialize_custom_image_sizes\');
我知道我可以使用TimThumb获得相同的结果,但我更喜欢使用WordPress的内置功能
这里有一个指向该插件的链接:-
http://wordpress.org/extend/plugins/custom-image-sizes/
提前感谢!
史蒂夫