Если вы пользовались формой публикации записи в плагине Wp-Recall, то наверняка знаете, что у пользователя есть возможность присоединения нескольких файлов к своей записи. Некоторым пользователям не дает покоя реализация такой возможности для своих проектов, поэтому давайте разберем порядок работы этого функционала на составляющий код.
Для начала нам понадобиться обычная форма отправляющая наши данные в файл обработчик. Так как, кроме обычного текста, наша форма должна отправлять еще и файлы картинок, то добавим внутрь тега form дополнительный атрибут enctype="multipart/form-data" и сразу добавим одно поле для загрузки файла с атрибутом name="image_file[]", это будет нужно для формирования массива с данными о загружаемых изображениях.
На данный момент в форме мы имеем только одно поле для загрузки файла, но нам нужно столько сколько потребуется, поэтому придется прибегнуть к помощи jQuery. Рассмотрим такой код:
var i = 1; //устанавливаем начало отсчета с 1 jQuery('#add').click(function() { //фиксируем нажатие на "+ Еще" if(i<5){ //если не более 5 //то добавляем еще одно поле для загрузки jQuery('').fadeIn('slow').appendTo('.inputs'); }else{ //если нет, то удаляем кнопку добавления полей jQuery(this).remove(); } i++; //после добавления увеличиваем счетчик на 1 return false; });
Логика работы кода следующая. В данном коде мы отлавливаем нажатие на элемент с идентификаторов id="add", в нашем случае это слово "+ Еще". Так как я установил ограничение на количество загружаемых файлов до 5шт., то считаем количество нажатий и проверяем не превысили ли мы максимальное количество. При каждом нажатии мы добавляем в контейнер с классом '.inputs' еще одно дополнительное поле для загрузки файла. Если мы достигли предела по количеству выводимых полей для загрузки, то удаляем кнопку на добавление.
Вот и все, мы можем загружать теперь несколько файлов. Для кого то этого будет достаточно, но кому надо объяснить что делать далее, те. описать процесс обработки полученных данных.
Я опишу на примере публикации записи в плагине. Нам требуется опубликовать запись и прикрепить к ней те картинки которые были добавлены через поля загрузки в форме публикации.
//подключаем необходимые файлы вордпресс для возможности присоединения //загруженных изображений к записи require_once(ABSPATH . "wp-admin" . '/includes/image.php'); require_once(ABSPATH . "wp-admin" . '/includes/file.php'); require_once(ABSPATH . "wp-admin" . '/includes/media.php'); global $user_ID; //получаем данные из поля заголовка записи $post_title = $_POST['post_title']; //получаем данные из поля содержание записи $post_content = $_POST['post_content']; //формируем массив с данными необходимыми для публикации записи $my_post = array( 'post_title' => "$post_title", 'post_content' => "$post_content", 'post_status' => 'publish', 'post_author' => "$user_ID" ); //публикуем запись $id_post = wp_insert_post( $my_post ); if ($id_post) { //если запись опубликована if($_FILES['image_file']){ //и если массив с изображениями существует //то считаем их количество файлов находящихся в нем $count_image = count($_FILES['image_file']); //обрабатываем каждое изображение в цикле for($a=0;$a<$count_image;$a++){ //получаем данные о загруженном файле $image = wp_handle_upload( $_FILES['image_file'][$a], array('test_form' => FALSE) ); //формируем массив данных для занесения информации о файле в БД $attachment = array( 'post_mime_type' => $image['type'], //тип файла 'post_title' => $image['file'],//имя файла 'guid' => $image['url'],//ссылка на файл 'post_parent' => $id_post //указываем запись к которой присоединяем файл ); //присоединяем файл к записи, заносим данные о файле в БД $attach_id = wp_insert_attachment( $attachment, $image['file'], $id_post ); $attach_data = wp_generate_attachment_metadata( $attach_id, $image['file'] ); wp_update_attachment_metadata( $attach_id, $attach_data } }
Я прокомментировал ключевые места в коде. По сути это упрощенный рабочий код.
Устанавливать обвесы будете по своему усмотрению)
Поясните, пожалуйста, какой нужен код, что бы добавить "Прикрепить изображение" в форму комментариев, а то сейчас оно создает новые записи, а не добавляет картинки в переписке пользователей (комментах)!? Я так понимаю это только для записей, а для комментирования есть, такая полезная штука?
Заранее благодарю!
Для комментирования этот код не совсем подходит, но если брать за основу этот алгоритм, то можно сделать такое и для формы комментирования.
а прикрепить готовый фал примера религия не позволяет? вы даете кусок кода, который обычный вебмастер врят-ли сможет использовать, т.к. в вашем примере нет готового кода, а лиш вырванные куски. нах такой код вообще нужен? ради СЕО? ну-ну.
Собственно, я привел рабочий пример кода, о чем и сообщаю в последнем предложении к статье. Видимо религия не позволяет вам хоть немного напречь то, что находится в голове. Если вы относите себя к вебмастерам, то вам наверняка не составит труда создать два файла: php и html, разместить там этот код и проверить его работоспособность. Ну а если вы не можете дойти до этого сами, что вам мешает просто попросить об этом? Я описываю алгоритм достаточно подробно, чтобы при желании вы смогли сами дойти до реализации, а простой копипаст не научит вас ничему. А про СЕО я вообще никогда не думаю)
Прочитал ответ. Правильно, Андрей. Если все тупо копировать, самому никогда не до чего не дойти. Если поставил плагин на сайт, необходимо понять как он работает и разбираться самому что к чему. А непонятное всегда можно спросить.