Я создал каталог в папке загрузок 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()
дает нам несколько полезных значений:
- ‘путь’ — базовый каталог и подкаталог или полный путь для загрузки каталога.
- ‘url’ — базовый URL и подкаталог или абсолютный URL для загрузки каталога.
- ‘subdir’ — вложенный каталог, если включена загрузка с использованием папок года / месяца.
- ‘basedir’ — путь без подкатегории.
- ‘baseurl’ — Путь URL без подкаталога.
- ‘error’ — установить в 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 по PHP> = 5.0.0, вы действительно может использовать file_exists
с некоторыми URL, Тем не менее http://
протокол не поддерживается для stat()
функция (который является то, что file_exists
использует.)
Вы должны использовать внутренний путь для проверки, существует ли файл.
Так что используйте $upload_dir['path']
вместо $upload_dir['baseurl']
[путь] — базовый каталог и подкаталог или полный путь для загрузки
каталог.