Wordpress вывести список файлов
Вы, должно быть, знаете, что сервер Apache может выводить в браузер листинг (т.е. список) содержимого ваших папок на сервере? Обычно вывод листинга запрещают, но его также можно разрешить и использовать, например, если нужно предоставить посетителям сайта .doc-файлы для скачивания.
Индексный файл или запрет вывода листинга
Если ввести в адресную строку браузера путь к папке, открывается индексный файл (например, index.html, index.php), который находится внутри этой папки, но если индексного файла в папке нет, а выдача листинга каталога не запрещена, появляется содержимое этой папки (каталога).
Листинг содержимого папки test
Обычно это нежелательно, поэтому в каждую папку нужно помещать индексный файл, пусть даже пустой) или задать в файле .htaccess, который находится внутри папки или внутри родительской папки (например, в корневой папке сайта) , запрет выдачи листинга каталогов:
Запрет распространяется на все дочерние (вложенные) папки. Поэтому, если вы хотите показать листинг файлов в какой-то папке, в ней не должно быть индексных файлов и в нее нужно поместить файл .htaccess с разрешением вывода листинга содержимого этой папки (и всех вложенных):
При этом можно запретить показывать некоторые файлы, в том числе с использованием регулярных выражений, например:
Здесь заданы файлы с расширением .php и начинающиеся с myfile (спецсимвол * заменяет любое количество символов).
Изменение страницы листинга
Если есть желание показывать пользователям листинг файлов, выдаваемый сервером, желательно убрать из него служебную информацию и добавить стили. Добавим в файл .htaccess строчки
Содержимое файла HEADER.html будет выводиться перед листингом, а файла README.html - после листинга.
HEADER.html (имена этих файлов могут быть любыми):
Вид листинга изменится так:
Листинг каталогов и .htaccess : 2 комментария
В WordPress есть множество функций, предназначенных для загрузки файлов. Сразу разобраться в них трудно — названия похожие и функционал часто дублируется. Рассмотрим последовательно все функции и попробуем загрузить файлы на сервер сначала в панели управления, а потом и в публичной части сайта. Для этого создадим плагин и будем его постепенно изменять, чтобы рассмотреть все возможности WordPress по загрузке файлов.
Загрузка файлов в панели управления
Простая загрузка одного файла
На первом этапе плагин просто загружает файл в соответствующую поддиректорию ( year/month ) директории /wp-content/uploads . Запись в таблицу базы данных wp_posts при этом не добавляется, т.е. этот файл не является вложением и недоступен для просмотра в библиотеке медиафайлов. Всю работу по загрузке файла выполняет функция wp_handle_upload() , которая является оберткой для нативной php-функции move_uploaded_file() .
Массив $_FILES , который содержит всю информацию о загруженном файле:
И массив, который возвращает функция wp_handle_upload() в случае успешной загрузки файла:
Загрузка одного вложения (attachment)
Хорошо, файл загружать мы умеем, посмотрим, как теперь из файла сделать вложение. Для этого достаточно указать функции media_handle_upload() ключ массива $_FILES , который содержит данные о загружаемом файле. И функция сама загрузит файл в директорию uploads и создаст запись о вложении в таблице wp_posts в базе данных.
Простая загрузка нескольких файлов
Давайте теперь загрузим несколько файлов. Для этого добавим атрибут multiple для элемента формы и будем «скармливать» функции wp_handle_upload() по одному загруженному файлу за раз:
Массив $_FILES , который содержит всю информацию о загруженных файлах:
Загрузка нескольких вложений (attachments)
Использовать, как и раньше, функцию media_handle_upload() уже не получится. Она работает напрямую с массивом $_FILES и в качестве первого аргумента требует индекс массива, который содержит информацию о файле. При этом функция не умеет работать с несколькими файлами. Здесь нам на помощь придет функция media_handle_sideload() . Будем перебирать все загруженные файлы в цикле и «скармливать» функции media_handle_sideload() по одному.
В случае ошибки при загрузке файла функция media_handle_sideload() возвращает объект
Читайте также: