
Пока я выпиливаю свои шаблоны, хотелось бы поделиться с вами какой-нибудь полезностью. Например, в ходе марафона я выучился создавать на Wordpress разнообразные каталоги, в том числе и каталог организаций, без использования плагинов.
Для этого я использую третью ветку Wordpress, функции таксономии и дополнительные типы записей. Весь процесс я буду показывать на тестовом сайте, предназначенном для тестирования возможностей Wordpress 3.
Чтобы осуществить задуманное, нам понадобиться открыть файл functions.php используемой темы и вставить перед последним закрывающим тегом ?> всё, что мы сейчас напридумываем.
Типы записей и дополнительные рубрики
Положим начало функции, которая будет содержать новый тип записей и его собственные рубрики:
function post_type_myfirms() {
При желании, замените myfirms на что-нибудь своё.
В эту функцию добавим новый тип записей:
<br />
register_post_type('firms',<br />
array(<br />
'label' => __('Организации'),<br />
'public' => true,<br />
'show_ui' => true,<br />
'publicly_queryable' => true,<br />
'supports' => array(<br />
'title',<br />
'editor',<br />
'post-thumbnails',<br />
'excerpts',<br />
'custom-fields',<br />
'revisions'<br />
)<br />
)<br />
);
Мы указали лишь некоторые параметры, объясню их вместе с теми, которые мы не здесь затронули.
- label – описание типа записей, можно указывать на своём языке;
- public – отображать ли этот тип записи в админке, по умолчанию указано значение false;
- exclude_from_search – исключать ли посты этого типа из поиска, по умолчанию false, если параметр public имеет значение true;
- publicly_queryable – позволять ли отображать посты этого типа на главной странице;
- show_ui – отображать ли стандартный интерфейс для редактирования записей этого типа, по умолчанию true, если параметр public имеет значение true;
- inherit_type – тип записи для наследования возможностей и ссылки на редактирование;
- capability_type – тип записи, по примеру которого следует подключить возможности чтения, редактирования и удаления записей, по умолчанию это «post»;
- edit_cap – управляет редактированием записей данного типа, по умолчанию «edit_$capability_type» (edit_post);
- edit_type_cap – управляет редактированием записей данного типа как класса, по умолчанию «edit_ . $capability_type . s» (edit_posts);
- edit_others_cap – управляет редактированием записей данного типа, созданных другими пользователями, по умолчанию «edit_others_ . $capability_type . s» (edit_others_posts);
- edit_others_cap – управляет публикацией записей данного типа, по умолчанию «publish_ . $capability_type . s» (publish_posts);
- read_cap – управляет чтением записей данного типа, по умолчанию «read_$capability_type» (read_post);
- delete_cap – управляет удалением записей данного типа, по умолчанию «delete_$capability_type» (delete_post);
- hierarchical – включает возможность иерархии постов, по умолчанию установлено значение false;
- supports – подключение элементов записи к странице редактирования, возможны следующие варианты:
- title — заголовок записи;
- editor (content) — содержание;
- author — автор записи;
- thumbnail — миниатюра;
- excerpts — краткий анонс;
- trackbacks — уведомления об обратных ссылках;
- custom-fields — дополнительные поля;
- comments — комментарии;
- revisions — ревизии;
- register_meta_box_cb – функция, вызываемая при установке полей записи. Используйте remove_meta_box () и add_meta_box () внутри этой функции;
- taxonomies – список дополнительных рубрик, зарегистрированных для данного типа записей, по умолчанию не используется, можно добавить поддержку отдельно с помощью функции register_taxonomy () или register_taxonomy_for_object_type ().
Более подробно обо всё об этом здесь (по-английски).
Теперь подключим таксономию (дополнительные рубрики и метки). Для этого после того кода, который мы уже вставили, зарегистрируем категории:
register_taxonomy( 'firmcat', 'firms', array( 'hierarchical' => true, 'label' => __('Категории') ) );
и после зарегистрируем города (в формате меток):
register_taxonomy( 'city', 'firms',<br />
array(<br />
'hierarchical' => false,<br />
'label' => __('Города'),<br />
'query_var' => 'city',<br />
'rewrite' => array('slug' => 'city' )<br />
)<br />
);
Подробнее читайте по-английски здесь.
Закроем функцию:
}
и активируем всё, что мы насочиняли:
add_action('init', 'post_type_myfirms');
Если ранее вы заменили myfirms на что-нибудь другое, сделайте это и здесь.
Шаблоны для каталога
Чтобы отделить наши записи от остальных материалов блога, нам понадобиться создать для них собственные шаблоны. Начнём со страницы, содержащей список рубрик, для этого откроем файл page.php и после:
<?php the_content(); ?>
добавим:
<?php if (is_page('firms')) { ?></p>
<p><strong>Рубрики</strong></p>
<p><?php wp_tag_cloud( array( 'taxonomy'=>'firmcat' , 'number'=>'0' ) ); ?></p>
<p><strong>Города</strong></p>
<p><?php wp_tag_cloud( array( 'taxonomy'=>'city' , 'number'=>'0' ) ); ?></p>
<p><?php }; ?>
Тем самым мы отобразим списки рубрик и городов в формате облака меток. Подробнее читайте в описании функции wp_tag_cloud.
Теперь создадим новую страницу с постоянной ссылкой «firms».
Добавим пару тестовых организаций, для этого перейдём в Организации → Добавить новую. Там же создадим пару категорий и добавим города.
Смотрим, что у нас получилось:

Теперь создадим шаблон для категорий и городов. Начнём с последнего, для этого откроем любой предусмотренный в теме файл категории или просто index.php и сохраним его как taxonomy-city.php.
В созданном файле добавим отображение рубрики, в котором располагается организация, перед:
<?php the_content() ?>
вставим:
<?php echo get_the_term_list( $post->ID, 'firmcat', '
<p>Рубрика: ', ', ', '</p>
<p>' ); ?>
а чтобы добавить заголовок страницы с названием города, после:
<?php if (have_posts()) : ?>
вставим:
<br />
<h2>Организации в городе "<?php $term = get_term_by( 'slug', get_query_var( 'term' ), get_query_var( 'taxonomy' ) ); echo $term->name; ?>"</h2>
<p>
Теперь сохраним этот файл как taxonomy-firmcat.php и заменим код для отображения рубрики на отображение города:
<?php echo get_the_term_list( $post->ID, 'city', '
<p>Город: ', ', ', '</p>
<p>' ); ?>
а код заголовка заменим, например, на следующий:
<br />
<h2><?php $term = get_term_by( 'slug', get_query_var( 'term' ), get_query_var( 'taxonomy' ) ); echo $term->name; ?></h2>
<p>
Создадим также шаблон для одиночной записи. Для этого сохраним файл single.php как single-firms.php и добавим в нём перед:
<?php the_content(); ?>
как рубрику:
<?php echo get_the_term_list( $post->ID, 'firmcat', '
<p>Рубрика: ', ', ', '</p>
<p>' ); ?>
так и город:
<?php echo get_the_term_list( $post->ID, 'city', '
<p>Город: ', ', ', '</p>
<p>' ); ?>
Проверяем результат:

Виджет
В принципе, каталог у нас готов, но я бы ещё добавил один симпатичный виджет со списком всех категорий и городов. Снова откроем файл functions.php и перед последним закрывающим тегом ?> добавим:
function firmcats() {<br />
?></p>
<li>
<h3>Организации</h3>
<p><strong>Рубрики:</strong></p>
<ul>
<?php wp_tag_cloud( array( 'taxonomy'=>'firmcat' , 'smallest' => 12,<br />
'largest' => 12,<br />
'unit' => 'px', 'format'=>'list' ) ); ?>
</ul>
<p><strong>Города:</strong></p>
<ul>
<?php wp_tag_cloud( array( 'taxonomy'=>'city' , 'smallest' => 12,<br />
'largest' => 12,<br />
'unit' => 'px', 'format'=>'list' ) ); ?>
</ul>
</li>
<p><?php };<br />
function register_firm_widget() {<br />
register_sidebar_widget('Организации', 'firmcats');<br />
}<br />
add_action('init', 'register_firm_widget');<br />
Получаем вот такую симпатяшку:

На этом всё. Наш каталог вы можете пощупать на тестовом сайте.
Как вы могли догадаться, Wordpress настолько чудесен, что мой сегодняшний урок лишь самая малая часть того, как можно извратиться при создании каталога организаций.
Можно самыми разными способами, в самых разных количествах и качествах отображать информацию, добавленную с помощью дополнительных типов записей и сортировать её с помощью дополнительных рубрик.
Желаю вам всего самого доброго и возвращаюсь к разработке 40 тем для Wordpress в рамках марафона «60000 руб./месяц за 100 дней».
Артём Савельев.
P.S. Компания Universe of Web предлагает услуги по увеличению продаж с через Интернет, в том числе поисковую раскрутку сайтов и контекстную рекламу.


Пассивный доход
Пассивный доход
Размещение ссылок
Размещение статей
Размещение ссылок
Размещение ссылок
Ссылки
Ссылки
Быстрые ссылки
Ссылки и статьи
Спасибо, это единственный блог, где я нашла именно создание каталога таксономиями в ВП 3.0, потрясающе!
Спасибо огромное !!
Было бы очень интересно почитать о более расширенном варианте каталога, с дополнительными плюшечками...
И жаль, что тестовый сайт недоступен ((
Ответить
@Serenita, Спасибо. Постараюсь учесть ваши пожелания.
Тестовый сайт к сожалению не доступен, не могу вернуть доступ к управлению доменом.
Ответить
А скажите, как теперь удалить это всё))
Записи и вручную можно, но в БД же что-то записывается. Из файлов-то не проблема.
Экспериментировал на работающем проекте, теперь нужно изменить кое-что, сделать заново.
И как сделать, чтобы структура была такая: сайт.ру/catalog-add это страница с формой отправки инфы, создаваемая вручную. сайт.ру/catalog — страница с категориями, которая тоже создаётся вручную, туда пихаются ссылки категорий с иконками. Потом сайт.ру/catalog/auto — страница со списком записей. И наконец, сайт.ру/catalog/auto/prodau-volgu — страница с конкретным объявлением.
Есть идеи как так сделать?) Кучу каталогов пересмотрел, всё не то.
Ответить
@Макаров, попробуйте вот этот метод:
seogad.ru/cms/custom-perm...ustom-post-types
Ответить
Ребят, подскажите, как можно залить автоматом каталог организаций из Excel.
Ответить
@Вадим, изменить формат файла в xml и привести его к подходящему виду
Ответить
Почему-то при выборе метки, шаблон taxonomy-city.php не хочет работать, пишет:
Не найдено
Извините, но запрошенную вами страницу найти не удалось. Попробуйте найти её с помощью поиска.
Все другие шаблоны подгружаются... Где может быть проблема?
WP3.1
Ответить
не подключается шаблон taxonomy-city.php при выборе метки, все другие работают, где мог ошибиться?..
Ответить
@sergtv, видимо опечатка
работает...
отличная статья!
Ответить
Артем, не подскажете, делаю, как у Вас, потом не могу перейти по ссылке новой рубрике или городу, /firmcat/zagsy/ — пишет Не найдено
К сожалению, запрашиваемая Вами страница не найдена. Возможно, Вам поможет поиск.
Не подскажете в чем может быть проблема?
Ответить
Низзя register_post_type до инициализации ( add_action ('init', 'post_type_myfirms'); )
См. коммент разработчиков в /wp-includes/post.php
Ответить