Пример реализации простого модуля галереи на WordPress.

Пример реализации простого модуля галереи на WordPress.В данной статье пойдет речь, как сделать простую галерею.Задача стоит таким образом – сделать возможность добавлять посты в определенную категорию, в которых бы был вывод изображений, описания, каких либо атрибутов (об этом ниже), и при этом была возможность crop и resize превью по большей стороне и с сохранением качества.

Реализация задачи была выбрана следующая – написать свой модуль.
API Wordpress - а не такое сложное, как принято воспринимать со стороны, впервые решив разобраться с тем, как писать модули. Если вы знакомы с PHP, HTML и CSS – то написать свой модуль (с интеграцией в форму добавления поста) – не составит большого труда.

Первое что нам нужно – это создать файлы нашего модуля. Я ограничился двумя исполняющими файлами imageslist.php и imageresize.php. Первый файл – основной – это набор функций для интеграции нашего модуля в админку и обработку добавляемых данных. Второй – библиотека с функциями crop и resize изображений.
Нам необходимы функции для определения блоков boxes с input для добавления необходимой информации. В нашем случае – это input с type = file.
ВАЖНО. Чтобы создаваемая форма работала корректно, необходимо в основном шаблоне редактирования (добавления) wp-admin/edit-form-advanced.php добавить в форму следующее - enctype=”multipart/form-data” на 48й строке.
Определить boxes можно следующим образом (названия функций подразумевает в «imageslistforpost» название модуля):

function imageslistforpost_add_boxes() {
add_meta_box(
'imageslistforpost_posticon',
'Фотографии',
'imageslistforpost_inner_posticon_box',
'post',
'normal' ,
'high');
}

function imageslistforpost_inner_posticon_box($post) {
...ваш код формы...
}

Первая функция определяет, что в админку нужно добавить блок imageslistforpost_posticon с заголовком «Фотографии», и обработать при этом функцию imageslistforpost_inner_posticon_box, которая является своеобразным контейнером с полями нашей дополнительной части основной формы.
Теперь нам нужен обработчик, который при выполнении добавления или сохранения редактированного поста, сделает нужные нам действия по сохранению данных в базу данных – а именно имя картинки. Подразумевается, что хранить картинки (превью и полный размер) мы будем в одном каталоге, но с разными дескрипторами. Такой подход позволит разделять файлы по именам. Конечно, в реальном проекте такой подход – неверный – но для нашего простого примера – лучше и не придумать.
Далее пишем такую функцию

function imageslistforpost_set_order() {
global $wpdb, $post;
$arrPostID = $_POST['POST_ID'];
...ваш код обработки поступающих данных из формы...
}

Нам ни к чему писать обработчик сохранения данных по основным полям формы постов. WordPress добавит эти данные сам. Нам нужно только обработать входящие данные из нашего дополнения к форме. Тут вариантов масса. Я написал отдельный класс для обработки изображений. В самом простом варианте вам нужно просто обработать массив $_FILES с данными о загружаемом файле. Как уже вы будете обрабатывать их в дальнейшем – выбор за вами. Мы же рассматриваем реализацию со стороны Wordpress. Для сохранения данных в базе данных WordPress мы используем таблицу wp_postmeta и методы add_post_meta($post_id, $key, $value, true) и update_post_meta($post_id, $key, $value), где $post_id – номер поста, $key – ключ поля – текстовое поле с уникальным индефикатором для текущего поста и $value – значение – в нашем случае это имя загружаемой картинки.
ВАЖНО. Формируя имя файла стоит побеспокоиться о том, что бы оно было уникальным.

Еще один важный момент. Стоит сделать отдельный файл для стилей контента модуля. В будущем поможет обойти неприятные моменты в состыковке с новыми темами оформления.

function imageslistforpost_head() {
...добавляем стили
}

Мы просмотрели основные моменты для добавления блока в форму. Но это еще не все. Нужно инициализировать эти функции.

add_action('save_post', 'imageslistforpost_set_order'); // called when a post is added or modified
add_action('wp_head', 'imageslistforpost_head');

Я не стал описывать остальные моменты при создании модуля, такие как валидацию данных массива $_POST и $_FILES, описывать реализацию редактирования и удаления данных и т.д. Но мы вкратце рассмотрели основу создания своего модуля с интеграцией в админ часть.

Если есть вопросы - задавайте.



2 комментария к статье

  • webernie
    Размещено 27. June 2009 в 14:18

    Спасибо за материал. Этот модуль пригодится для создания портфолио на моем блоге…

  • kylibin
    Размещено 19. July 2009 в 07:38

    да, интересній пост, коды это хорошо, но неплохо было бы еще глянуть пример работы галереи.

Статью комментируют

 



Поиск