Вместо плагина аукциона для Wordpress – аукцион руками на Custom post types
07.02.2011В связи с интересом к плагину для создания аукциона на блоге wordpress, который не было возможности доработать из-за недостатка времени и большого количества ошибок в оригинальной версии, я решил помочь желающим сделать аукцион руками, без плагина. Для этого предлагаю внести изменения в файлы шаблона. Нужно добавить ряд функций и несколько файлов – шаблонов отображения самого аукциона и форму добавления лота. Если в ходе обсуждений вместе придем к тому, что нужен-таки плагин, значит скомпилирую полученный код и выложу в репозитарий плагинов Wordpress.
Делать будем вместе с нуля и по шагам. Идея основана на новшестве WordPress 3.0 – Custom Types, которое позволяет добавить свои типы записей, рубрик и меток. Таким образом, мы получим тип записи – Лоты аукционов, типы категорий – Категории аукционов, типы меток – Метки аукционов. На тип данных можно выставить необходимые права, что бы зарегистрированные пользователи могли добавлять лоты, но не могли писать и редактировать записи в блоге.
Для начала нужно поэкспериментировать с типами данных, поэтому я создал демо-сайт для аукциона и добавил одну функцию в файл functions.php в теме блога.
Вот код функции:
-
-
/* Функция регистрирует:
-
@ тип записей lots, которая будет использоваться для хранения лотов аукциона,
-
@ категории и меток для лотов
-
@ выставляет права для различных типов пользователей
-
*/
-
function types_create() {
-
//Сбросить
-
flush_rewrite_rules( false );
-
//Регистрируем тип записей lots [см.: http://codex.wordpress.org/Function_Reference/register_post_type ]
-
register_post_type( 'lots', array(
-
'label' => 'Аукцион',
-
'labels' => array(
-
'name' => 'Лоты',
-
'singular_name' => 'Лот',
-
'add_new' => 'Добавить лот',
-
'add_new_item' => 'Добавить лот',
-
'new_item' => 'Добавить лот',
-
'edit_item' => 'Редактировать лот',
-
'view_item' => 'Посмотреть',
-
'search_items' => 'Поиск',
-
),
-
'capability_type' => 'post',
-
//Создаем свои правила для раздачи прав на редактирование, удаление, публикацию
-
'capabilities' => array(
-
'edit_post' => 'edit_lot',
-
'edit_posts' => 'edit_lots',
-
'delete_posts' => 'delete_lots',
-
'read' => 'read_lot',
-
'edit_published_posts' => 'edit_published_lots',
-
'delete_published_posts' => 'delete_published_lots',
-
'edit_others_posts' => 'edit_others_lots',
-
'delete_others_posts' => 'delete_others_lots',
-
'publish_posts' => 'publish_lots'
-
-
),
-
'taxonomies' => array('lot_cat','lot_tag'),
-
'hierarchical' => false,
-
'public' => true,
-
'_builtin' => false,
-
'_edit_link' => 'post.php?post=%d',
-
'query_var' => true,
-
'supports' => array( 'title', 'editor', 'author', 'thumbnail', 'excerpt', 'custom-fields', 'comments', 'revisions' ),
-
) );
-
-
/*
-
Регистрируем категории лотов см: http://codex.wordpress.org/Function_Reference/register_taxonomy
-
*/
-
register_taxonomy('lot_cat', 'lots', array(
-
'label' => 'Категории лотов',
-
'public' => true,
-
'show_in_nav_menus' => true,
-
'show_ui' => true,
-
'hierarchical' => true,
-
'rewrite' => true,
-
));
-
/*
-
Регистрируем теги для лотов см: http://codex.wordpress.org/Function_Reference/register_taxonomy
-
*/
-
register_taxonomy('lot_tag', 'lots', array(
-
'label' => 'Метки лотов',
-
'public' => true,
-
'show_in_nav_menus' => true,
-
'show_ui' => true,
-
'hierarchical' => false,
-
'rewrite' => true,
-
));
-
-
register_taxonomy_for_object_type('lot_tag', 'lots');
-
register_taxonomy_for_object_type('lot_cat', 'lots');
-
-
$GLOBALS['wp_rewrite']->flush_rules();
-
/* Права для админа */
-
$role =& get_role('administrator');
-
$role->add_cap('edit_lot');
-
$role->add_cap('edit_lots');
-
$role->add_cap('publish_lots');
-
$role->add_cap('edit_published_lots');
-
-
/* Права для редактора */
-
$role =& get_role('editor');
-
$role->add_cap('edit_lot');
-
$role->add_cap('edit_lots');
-
$role->add_cap('publish_lots');
-
$role->add_cap('edit_published_lots');
-
-
/* Права для автора */
-
$role =& get_role('author');
-
$role->remove_cap('publish_lots');
-
$role->add_cap('unfiltered_html');
-
$role->add_cap('edit_lots');
-
$role->add_cap('edit_lot');
-
// … по аналогии можно дать права для пользователей участник и подписчик
-
-
}
-
// добавляем тип данных при инициализации блога.
-
add_action( 'init', 'types_create',0 );
После добавления этого кода в functions.php, зашел в админку и увидел пункт «Лоты«, в котором есть подразделы Лоты, Добавить лот, Категории лотов, Метки лотов. Добавил лот и получил страницу с адресом:
http://au.madweb.ru/lots/реклама-на-сайте/
Можно добавить так же другие типы рубрик, например регионы/города, типы аукциона (т.е. Английский, Голландский) и т.д. Хранить дополнительные поля, такие как стартовая цена, блиц-цена, дата начала, дата окончания и т.п. можно в произвольных полях (post_meta).
Это уже можно протестировать и перейти к следующему шагу – шаблонам. Нужно будет сделать отображение ленты лотов, шаблоны самих лотов, а так же страницы архивов по категориям и меткам лотов (и других типов рубрик, если требуется).
Жду ваших вопросов и идей по функционалу аукциона.
Смотреть так же:
- Создаем шаблоны для своих Custom Post Types в WordPress Для продолжения создания аукциона на
- Плагин аукциона. Обновление В плагину аукциона внес обновления.
- Плагин аукциона для Wordpress Разрабатываю плагин аукциона для Wordpress,
- Плагин аукциона. Обновление Сделал загрузку изображений. В оригинале
- Куда добавить статью. Блоги для бесплатной публикации статей. Привожу несколько сайтов, на которых
- Сайты для людей Сейчас можно столько информации найти
- Как отображать последние записи с блога в статической странице Допустим, вы на свой статический
- Тормоза при обновлении WordPress При обновлении WordPress до 3.3.
- Ускоряем WordPress. Переносим статику на отдельный домен Для ускорения сайта на WordPress
- Как изменить stylesheet_url в Wordpress Столкнулся с проблемой, когда изменения

Один комментарий на запись “Вместо плагина аукциона для Wordpress – аукцион руками на Custom post types”
22.11.2011 в 19:19
и как данный скрипт привязать к вордпрессу чайнику?