缩略图URL似乎是相对于上载文件夹生成的。因此,尝试将它们存储在uploads文件夹之外并不是一个好主意。
有一些黑客可以过滤输出中的函数,例如the_post_thumbnail_url()
, 但考虑到诸如缩略图无法删除之类的次要问题,不值得一试。
我能够实现的是,将生成的缩略图存储在uploads文件夹内的另一个子目录中,然后通过在.htaccess
文件,以防您想要保护它们不被访问者访问,从而禁止直接访问它们。
我可以在wp-image-editor-gd.php
将缩略图存储在子目录中。以下是如何做到这一点:
首先,我们将自己的类设置为主图像生成器:
add_filter(\'wp_image_editors\', \'custom_wp_image_editors\');
function custom_wp_image_editors($editors) {
array_unshift($editors, "custom_WP_Image_Editor");
return $editors;
}
然后,我们将包括需要扩展的必要类:
require_once ABSPATH . WPINC . "/class-wp-image-editor.php";
require_once ABSPATH . WPINC . "/class-wp-image-editor-gd.php";
最后设置路径:
class custom_WP_Image_Editor extends WP_Image_Editor_GD {
public function generate_filename($suffix = null, $dest_path = null, $extension = null) {
// $suffix will be appended to the destination filename, just before the extension
if (!$suffix) {
$suffix = $this->get_suffix();
}
$dir = pathinfo($this->file, PATHINFO_DIRNAME);
$ext = pathinfo($this->file, PATHINFO_EXTENSION);
$name = wp_basename($this->file, ".$ext");
$new_ext = strtolower($extension ? $extension : $ext );
if (!is_null($dest_path) && $_dest_path = realpath($dest_path)) {
$dir = $_dest_path;
}
//we get the dimensions using explode
$size_from_suffix = explode("x", $suffix);
return trailingslashit( $dir ) . "{$size_from_suffix[0]}/{$name}.{$new_ext}";
}
}
现在,缩略图将根据其宽度存储在不同的子文件夹中。例如:
/wp-content/uploads/150/example.jpg
/wp-content/uploads/600/example.jpg
/wp-content/uploads/1024/example.jpg
等等。
可能的问题
现在,当我们上载小于最小缩略图大小的图像时,可能会出现问题。例如,如果我们上传图像,大小
100x100
最小缩略图大小为
150x150
, 将在上载目录中创建另一个文件夹。这可能会导致上载目录中有许多子目录。我用另一种方法解决了这个问题
this 问题