WP_GET_ATTACHING_IMAGE_src和服务器路径

时间:2015-03-27 作者:maryisdead

wp_get_attachment_image_src 将为我提供图像的URL和维度。

但是,是否有任何方法可以获取缩放图像的服务器路径(例如/html/wordpress/wp-content/uploads/2015/03/cat-2-300x225.jpeg)? 我知道get_attached_file 但这只返回原始图像。

我希望避免黑客解决方案(字符串替换域等)或使用WP_Image_Editor 直接地此外,它应该是多站点的证明。有什么我刚刚错过的官方消息吗?

1 个回复
最合适的回答,由SO网友:gmazzap 整理而成

WordPress不会将生成的大小路径存储在任何地方,您需要构建它。

根据建议@kraftner 在评论中,wp_get_attachment_metadata() 可用于获取构建路径所需的部分内容。另一种选择是image_get_intermediate_size().

缺少的部分是上载文件夹的绝对路径理论上,可以通过wp_upload_dir() 但有一个问题:该函数在调用上载文件夹时立即返回该文件夹,但始终存在上载文件时上载路径不同的可能性。

所以only 可以假设缩放后的图像与原始图像位于同一文件夹中。

这一假设可能看起来有点不切实际,也可能有点不切实际,但它在WordPress核心中被以下函数使用image_downsize() 这正好可以替换字符串(参见第行#184 of media.php), 因此,如果您正在寻找官方途径。。就是那个。

把东西放在一起:

function scaled_image_path($attachment_id, $size = \'thumbnail\') {
    $file = get_attached_file($attachment_id, true);
    if (empty($size) || $size === \'full\') {
        // for the original size get_attached_file is fine
        return realpath($file);
    }
    if (! wp_attachment_is_image($attachment_id) ) {
        return false; // the id is not referring to a media
    }
    $info = image_get_intermediate_size($attachment_id, $size);
    if (!is_array($info) || ! isset($info[\'file\'])) {
        return false; // probably a bad size argument
    }

    return realpath(str_replace(wp_basename($file), $info[\'file\'], $file));
}
上面的函数获取附件id和大小并返回路径。

我已经申请了realpath 之前返回路径,因为该函数对于不存在的文件返回false,所以如果出现问题,整个函数始终返回false。

此流程的唯一替代方法是自己将缩放图像的路径保存到某个位置,可能会发布元数据,并在需要时进行检索,但这只能用于插件激活后上载的文件。。。

结束

相关推荐

Resize images in batch

我想调整服务器上的图像大小,我的WordPress站点库中有7000多个图像。我想调整服务器本身上所有图像的大小。我知道可以使用“重新生成缩略图”插件,但为此,我将不得不整天打开浏览器窗口,甚至可能在中间某个地方崩溃,这将导致我再次调整所有图像的大小。有谁有更好的主意来做这件事吗?请简要解释答案。