К основному контенту

Использование AJAX для загрузки файлов в WordPress

В этой статье я бы хотел подвести итог шестичасовых поисков и экспериментов. В одном из моих плагинов для WordPress требуется загрузить файл на сервер. Естественно, хотелось сделать это через AJAX, да еще с плюшками и что бы все было красиво. Много покопав Google я сделал это!
Для начала, мне нужен был готовый интерфейс и функционал. Этого добра навалом на просторах Интернета, но мне понравился тот, который умеет drag-n-drop. Называется он Mini AJAX File Upload Form. Презентабельный интерфейс, умеет drag-n-drop, использует jQuery и jQuery UI.

Это все хорошо, но это не часть плагина для WordPress, а самостоятельная единица. Нужно это прикрутить к плагину. Для начала я объявил shortcode для того, что бы встраивать эту форму на любую страницу сайта. Второе - нужно несколько поправить код uplod.php для того, что бы можно было использовать функции WordPress. Мозг долго не работал и я потратил на поиски порядка пяти часов, но в конечном итоге все оказалось предельно просто. Я добавил несколько строк кода в исходный upload.php и прокомментировал их:

/**
 * Переопределим разделитель директорий что бы был покороче
 */
if (!defined('DS'))
    define('DS', DIRECTORY_SEPARATOR);
 
/**
 * Загружаем wordpress
 */
require_once( $_SERVER['DOCUMENT_ROOT'] . DS . 'wp-load.php' );
 
/**
 * Директория плагина
 */
if (!defined('LS_PLUGIN_DIR'))
    define('LS_PLUGIN_DIR', WP_PLUGIN_DIR . DS . dirname(plugin_basename(__FILE__)));
 
$allowed = array('txt');
if (isset($_FILES['upl']) && $_FILES['upl']['error'] == 0)
{
    $extension = pathinfo($_FILES['upl']['name'], PATHINFO_EXTENSION);
 
    if (!in_array(strtolower($extension), $allowed))
    {
        echo '{"status":"error"}';
        exit;
    }
 
    /**
     * Файл, в который будет скопирован загруженный файл
     */
    $new = LS_PLUGIN_DIR . DS . 'uploads' . DS . $_FILES['upl']['name'];
 
    if (move_uploaded_file($_FILES['upl']['tmp_name'], $new))
    {
        echo '{"status":"success"}';
        exit;
    }
}
 
echo '{"status":"error"}';
exit;

Ну, а shortcode подменялся на форму:

<form id="upload" method="post" action="<?php echo LS_PLUGIN_URL . '/services/email_upload.php';  ?>" enctype="multipart/form-data">
    <div id="drop">
        Drop Here
        <a>Browse</a>
        <input type="file" name="upl" />
    </div>
 
    <ul>
        <!-- The file uploads will be shown here -->
    </ul>
</form>

Надеюсь, эта статья сильно ускорит ваш процесс загрузки файлов в WordPress.

Дополнение

В дополнении хотелось бы указать несколько полезных ресурсов, относительно решений по загрузке файлов на сервер и по shortcode для WordPress:

Комментарии

Популярные сообщения из этого блога

Прямые ссылки на файлы Google диска

В предыдущей статье я рассказал, как подключить свой JavaScript файл к блогу BLOGSPOT . Но для того, что бы их подключить нужны прямые ссылки на файл, а Google диск при предоставлении общего доступа к файлу выдает ссылку на предварительный просмотр, которая никак напрямую не ссылается на файл. Для Google диска прямая ссылка на файл - это ссылка на скачивание. Ниже описаны два способа создания ссылки на скачивание на примере файла prism.js.

События для ведения таблиц

Как и всегда, в пылу проекта внезапно родилась Z табличка. Главный нюанс был в том, что она должна была хранить пароли для авторизации на стороннем сервере. Естественно, никто не хотел хранить пароли в открытом виде, а двустороннее шифрование SAP не умеет без сторонних пакетов и надстроек. Далее, все как обычно - придумали алгоритм, сделали табличку. Дело осталось за малым - нужно шифровать пароли, которые вводит пользователь. Делать отдельную программу нет смысла, поскольку ее функционал мало чем будет отличаться от сгенерированного. Вот здесь на помощь приходят события! С их помощью можно, наверное, все. По крайней мере, я не нашел чего-либо, что нельзя сделать с данными через события.

OOP ALV GRID с HTML шапкой

В этой статье хочу постараться подробно описать и привести пример, как можно создать ALV отчет с таблицей на весь экран и с HTML шапкой вверху. Я не буду описывать начальный этап, где пишется селекционный экран или делается выборка данных. Будем считать, что основа у нас есть и нам нужно просто вывести данные. Главной изюминкой является то, что нужно вывести ALV GRID на экран без использования каких-либо дополнительных элементов на экране. Step-By-Step Шаг 1. Создание окна Создаем самое простое окно с номером 100. На него не нужно кидать никаких контейнеров. Оно нам нужно только для модулей PAI и PBO и вывода на него ALV GRID.