используйте file_exists (), чтобы проверить папку загрузки WordPress

Я создал каталог в папке загрузок 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; ?>

2

Решение

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 использует.)

4

Другие решения

Вы должны использовать внутренний путь для проверки, существует ли файл.
Так что используйте $upload_dir['path'] вместо $upload_dir['baseurl']

[путь] — базовый каталог и подкаталог или полный путь для загрузки
каталог.

http://codex.wordpress.org/Function_Reference/wp_upload_dir

1