В этой статье я бы хотел подвести итог шестичасовых поисков и экспериментов. В одном из моих плагинов для WordPress требуется загрузить файл на сервер. Естественно, хотелось сделать это через AJAX, да еще с плюшками и что бы все было красиво. Много покопав Google я сделал это!
Для начала, мне нужен был готовый интерфейс и функционал. Этого добра навалом на просторах Интернета, но мне понравился тот, который умеет drag-n-drop. Называется он Mini AJAX File Upload Form. Презентабельный интерфейс, умеет drag-n-drop, использует jQuery и jQuery UI.
Это все хорошо, но это не часть плагина для WordPress, а самостоятельная единица. Нужно это прикрутить к плагину. Для начала я объявил shortcode для того, что бы встраивать эту форму на любую страницу сайта. Второе - нужно несколько поправить код uplod.php для того, что бы можно было использовать функции WordPress. Мозг долго не работал и я потратил на поиски порядка пяти часов, но в конечном итоге все оказалось предельно просто. Я добавил несколько строк кода в исходный upload.php и прокомментировал их:
Ну, а shortcode подменялся на форму:
Надеюсь, эта статья сильно ускорит ваш процесс загрузки файлов в WordPress.
Для начала, мне нужен был готовый интерфейс и функционал. Этого добра навалом на просторах Интернета, но мне понравился тот, который умеет 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:
Комментарии
Отправить комментарий