« ПредыдущаяСледующая »

Вместо плагина аукциона для Wordpress – аукцион руками на Custom post types

07.02.2011

В связи с интересом к плагину для создания аукциона на блоге wordpress, который не было возможности доработать из-за недостатка времени и большого количества ошибок в оригинальной версии, я решил помочь желающим сделать аукцион руками, без плагина. Для этого предлагаю внести изменения в файлы шаблона. Нужно добавить ряд функций и несколько файлов – шаблонов отображения самого аукциона и форму добавления лота. Если в ходе обсуждений вместе придем к тому, что нужен-таки плагин, значит скомпилирую полученный код и выложу в репозитарий плагинов Wordpress.

Делать будем вместе с нуля и по шагам. Идея основана на новшестве WordPress 3.0 – Custom Types, которое позволяет добавить свои типы записей, рубрик и меток. Таким образом, мы получим тип записи – Лоты аукционов, типы категорий – Категории аукционов, типы меток – Метки аукционов. На тип данных можно выставить необходимые права, что бы зарегистрированные пользователи могли добавлять лоты, но не могли писать и редактировать записи в блоге.

Для начала нужно поэкспериментировать с типами данных, поэтому я создал демо-сайт для аукциона и добавил одну функцию в файл functions.php в теме блога.

Вот код функции:

  1.  
  2. /* Функция регистрирует:
  3.    @ тип записей lots, которая будет использоваться для хранения лотов аукциона,
  4.    @ категории и меток для лотов
  5.    @ выставляет права для различных типов пользователей
  6.  */
  7. function types_create() {
  8.  //Сбросить
  9.  flush_rewrite_rules( false );
  10. //Регистрируем тип записей lots [см.: http://codex.wordpress.org/Function_Reference/register_post_type ]
  11.  register_post_type( 'lots', array(
  12.   'label' => 'Аукцион',
  13.   'labels' => array(
  14.    'name' => 'Лоты',
  15.    'singular_name' => 'Лот',
  16.    'add_new' => 'Добавить лот',
  17.    'add_new_item' => 'Добавить лот',
  18.    'new_item' => 'Добавить лот',
  19.    'edit_item' => 'Редактировать лот',
  20.    'view_item' => 'Посмотреть',
  21.    'search_items' => 'Поиск',
  22.   ),
  23.   'capability_type' => 'post',
  24. //Создаем свои правила для раздачи прав на редактирование, удаление, публикацию
  25.   'capabilities' => array(
  26.     'edit_post' => 'edit_lot',
  27.     'edit_posts' => 'edit_lots',
  28.     'delete_posts' => 'delete_lots',
  29.     'read' => 'read_lot',
  30.     'edit_published_posts' => 'edit_published_lots',
  31.     'delete_published_posts' => 'delete_published_lots',
  32.     'edit_others_posts' => 'edit_others_lots',
  33.     'delete_others_posts' => 'delete_others_lots',
  34.     'publish_posts' => 'publish_lots'
  35.    
  36.   ),  
  37.   'taxonomies' => array('lot_cat','lot_tag'),
  38.   'hierarchical' => false,
  39.   'public'  => true,
  40.   '_builtin' => false,
  41.   '_edit_link' => 'post.php?post=%d',
  42.   'query_var' => true,
  43.   'supports' => array( 'title', 'editor', 'author', 'thumbnail', 'excerpt', 'custom-fields', 'comments', 'revisions' ),
  44.  ) );
  45.  
  46. /*
  47. Регистрируем категории лотов см: http://codex.wordpress.org/Function_Reference/register_taxonomy
  48. */
  49.  register_taxonomy('lot_cat', 'lots', array(
  50.   'label' => 'Категории лотов',
  51.   'public' => true,
  52.   'show_in_nav_menus' => true,
  53.   'show_ui' => true,
  54.   'hierarchical' => true,
  55.   'rewrite' => true,
  56.  ));
  57. /*
  58. Регистрируем теги для лотов см: http://codex.wordpress.org/Function_Reference/register_taxonomy
  59. */
  60.  register_taxonomy('lot_tag', 'lots', array(
  61.   'label' => 'Метки лотов',
  62.   'public' => true,
  63.   'show_in_nav_menus' => true,
  64.   'show_ui' => true,
  65.   'hierarchical' => false,
  66.   'rewrite' => true,
  67.  ));
  68.  
  69.  register_taxonomy_for_object_type('lot_tag', 'lots');
  70.  register_taxonomy_for_object_type('lot_cat', 'lots');
  71.  
  72.  $GLOBALS['wp_rewrite']->flush_rules();
  73. /* Права для админа */
  74.  $role =& get_role('administrator');
  75.  $role->add_cap('edit_lot');
  76.   $role->add_cap('edit_lots');
  77.  $role->add_cap('publish_lots');
  78.  $role->add_cap('edit_published_lots');
  79.  
  80. /* Права для редактора */
  81.  $role =& get_role('editor');
  82.  $role->add_cap('edit_lot');
  83.  $role->add_cap('edit_lots');
  84.  $role->add_cap('publish_lots');
  85.  $role->add_cap('edit_published_lots');
  86.  
  87. /* Права для автора */
  88.   $role =& get_role('author');
  89.  $role->remove_cap('publish_lots');
  90.  $role->add_cap('unfiltered_html');
  91.  $role->add_cap('edit_lots');
  92.  $role->add_cap('edit_lot');
  93. // … по аналогии можно дать права для пользователей участник и подписчик
  94.  
  95. }
  96. // добавляем тип данных при инициализации блога.
  97. add_action( 'init', 'types_create',0 );

После добавления этого кода в functions.php, зашел в админку и увидел пункт «Лоты«, в котором есть подразделы Лоты, Добавить лот, Категории лотов, Метки лотов. Добавил лот и получил страницу с адресом:

http://au.madweb.ru/lots/реклама-на-сайте/

Можно добавить так же другие типы рубрик, например регионы/города, типы аукциона (т.е. Английский, Голландский) и т.д. Хранить дополнительные поля, такие как стартовая цена, блиц-цена, дата начала, дата окончания и т.п. можно в произвольных полях (post_meta).

Это уже можно протестировать и перейти к следующему шагу – шаблонам. Нужно будет сделать отображение ленты лотов, шаблоны самих лотов, а так же страницы архивов по категориям и меткам лотов (и других типов рубрик, если требуется).

Жду ваших вопросов и идей по функционалу аукциона.

Рубрики: Программирование | Наверх
FASQu kTonnel keepter ЙеНот Закладки Yandex Linkstore Myscoop БобрДобр.ru Memori.ru МоёМесто.ru Mister Wong

Смотреть так же:


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

  1. Denim пишет:

    и как данный скрипт привязать к вордпрессу чайнику?

Оставьте комментарий.


fasqu Users
Enter your personal information in the form or sign in with your fasqu account by clicking the button below.


Рейтинг сайтов