7 Фев 2011Категория: Программирование Автор:

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

В связи с интересом к плагину для создания аукциона на блоге 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).

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

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



Смотрите так-же:

    Обратите внимание

    Календарь на 2014 год (карманный и домиком) для распечатки на принтере
    agesha.ru
    Поездка в Сосновую Рощу
    cross-roads.ru
    Узор, вышивка, символика в народных костюмах краеведческого музея Кургана
    cross-roads.ru

    2 комментария к «Вместо плагина аукциона для WordPress — аукцион руками на Custom post types»

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

    2. Михаил:

      Тут есть кто живой?
      Если есть то как идут дела по этой теме?
      И можно ли получить этот набор в архиве?

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

    Необходимо войти что бы оставить комментарий.

  • Рекомендую

    Business Key Top Sites
  • Реклама