我一直在编写一些类和函数来修改缩略图的路径。我扩展了原来的WP_Image_Editor
类来实现自定义结构。
What i want: 根据缩略图的slug,将缩略图存储在upload目录中的不同文件夹中。例如:http://example.com/uploads/medium/image.jpg
What i have already done:
class WP_Image_Editor_Custom extends WP_Image_Editor_GD {
public function generate_filename($prefix = NULL, $dest_path = NULL, $extension = NULL) {
global $current_size_slug;
// If empty, generate a prefix with the parent method get_suffix().
if(!$prefix)
$prefix = $this->get_suffix();
// Determine extension and directory based on file path.
$info = pathinfo($this->file);
$dir = ABSPATH."/media/";
$ext = $info[\'extension\'];
// Determine image name.
$name = wp_basename($this->file, ".$ext");
// Allow extension to be changed via method argument.
$new_ext = strtolower($extension ? $extension : $ext);
// Default to $_dest_path if method argument is not set or invalid.
if(!is_null($dest_path) && $_dest_path = realpath($dest_path))
$dir = $_dest_path;
// Return our new prefixed filename.
$slug = $current_size_slug;
return trailingslashit($dir)."{$slug}/{$name}.{$new_ext}";
}
function multi_resize($sizes) {
$sizes = parent::multi_resize($sizes);
foreach($sizes as $slug => $data)
$sizes[$slug][\'file\'] = $slug."/".$data[\'file\'];
$current_size_slug = $slug;
return $sizes;
}
}
上载图像时,缩略图创建正确,但文件名不正确。这个$slug
值未从传递multi_resize()
生成\\\\u文件名。我试着写multi_resize()
功能如下:
class WP_Image_Editor_Custom extends WP_Image_Editor_GD {
public function generate_filename($prefix = NULL, $dest_path = NULL, $extension = NULL) {
global $current_size_slug;
// If empty, generate a prefix with the parent method get_suffix().
if(!$prefix)
$prefix = $this->get_suffix();
// Determine extension and directory based on file path.
$info = pathinfo($this->file);
$dir = ABSPATH."/media/";
$ext = $info[\'extension\'];
// Determine image name.
$name = wp_basename($this->file, ".$ext");
// Allow extension to be changed via method argument.
$new_ext = strtolower($extension ? $extension : $ext);
// Default to $_dest_path if method argument is not set or invalid.
if(!is_null($dest_path) && $_dest_path = realpath($dest_path))
$dir = $_dest_path;
// Return our new prefixed filename.
$slug = $current_size_slug;
return trailingslashit($dir)."{$slug}/{$name}.{$new_ext}";
}
function multi_resize($sizes) {
$sizes = parent::multi_resize($sizes);
foreach($sizes as $slug => $data)
$sizes[$slug][\'file\'] = $slug."/".$data[\'file\'];
$current_size_slug = $slug;
return $sizes;
}
}
现在$slug
已传递给generate_filename()
但缩略图都是在uploads文件夹中生成的,相互覆盖。我该怎么做?我在这里不知所措,非常感谢您的帮助。