Публикация в группе: Полезное для WordPress

Если вы пользовались формой публикации записи в плагине 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 
           }
        }

Я прокомментировал ключевые места в коде. По сути это упрощенный рабочий код.
Устанавливать обвесы будете по своему усмотрению)

70

Автор публикации

не в сети 5 часов

Андрей CS

12K
занят
Комментарии: 2729Публикации: 481Регистрация: 30-11--0001Продаж/Покупок: 0/0