我在Wordpress上传文件夹中创建了一个目录,供最终用户通过ftp批量上传照片。图像编号为 1.jpg、2.jpg...等。我已经成功生成了图像 url,但现在我想测试空 url - 即如果"8.jpg"不存在,请显示主题图像文件夹中的占位符图像。
我正在尝试使用 file_exists(),但这每次都返回 false 并始终显示占位符图像。任何建议将不胜感激。
<?php while ( have_posts() ) : the_post();
// create url to image in wordpress 'uploads/catalogue_images/$sale' folder
$upload_dir = wp_upload_dir();
$sub_dir = $wp_query->queried_object;
$image = get_field('file_number');
$image_url = $upload_dir['baseurl'] . "/catalogue_images/" . $sub_dir->name . "/" . $image . ".JPG"; ?>
<?php if(file_exists($image_url)){
echo '<img src="' . $image_url . '" alt="" />';
} else {
//placeholder
echo '<img src="' . get_bloginfo("template_url") . '/images/photo_unavailable.jpg" alt="" />';
} ?>
<?php endwhile; ?>
PHP file_exists
函数主要期望要测试的文件的内部服务器路径。这在示例中很明显。
幸运的是,我们看到wp_upload_dir()
为我们提供了几个有用的值:
- "path" - 基目录和子目录或上传目录的完整路径。
- "url" - 基本 URL 和子目录或上传到目录的绝对 URL。
- "subdir" - 如果上传使用年/月文件夹选项,则子目录处于打开状态。
- 'basedir' - 没有子目录的路径。
- "baseurl" - 不带子目录的网址路径。
- "错误" - 设置为 false。
我已经加粗了我们想要使用的内容。使用这两个值,必须生成两个变量,一个用于外部 URL,一个用于内部文件路径:
$image_relative_path = "/catalogue_images/" . $sub_dir->name . "/" . $image . ".JPG";
$image_path = $upload_dir['basedir'] . $image_relative_path;
$image_url = $upload_dir['baseurl'] . $image_relative_path;
然后使用 file_exists($image_path)
而不是 file_exists($image_url)
。
注意
与 PHP>= 5.0.0 上的 PHP 注释一样,您确实可以将file_exists
与某些 URL 一起使用,但是 stat()
函数不支持 http://
协议(这是file_exists
使用的)。
您必须使用内部路径来检查文件是否存在。因此,请使用$upload_dir['path']
而不是$upload_dir['baseurl']
[路径] - 要上传的基目录和子目录或完整路径 目录。
http://codex.wordpress.org/Function_Reference/wp_upload_dir