Pull to refresh

Wordpress, основы custum post type (1 из 3)

Доброго времени суток, дорогие хабравчане, я уже много лет делаю сайты на wordpress и решил поделится своим опытом. Мне сильно порадовала новость ранее опубликованная aleksandrit, о том что "WordPress используется уже на более чем 50 миллионах сайтов", это новость вдохновляет все больше изучать глубокие и скрытые возможности Wordpress. Ранее подобная тема уже была опубликована bRuzом но я бы хотел подойти к вопросу иначе, шаг за шагом.

И так начнем с очевидного.

Зачем нужны custum post type


Главная цель custum post type позволить разработчику организовать данные на сайте. например: если речь идет о блоге, то у нас есть несколько типов данных(записи, медиафайлы, страницы и ссылки). Но что делать тем у кого сайт посвящен? новинкам кино индустрии? подобному сайту понадобится такой тип записей как «Обзор», у обзора должны быть такие характеристики как: жанр, год выпуска, обложка, актеры и т.д… Использования custum post type в отличие от обычных записей, дает нам возможность использовать эти данные в шаблоне, а так же искать по определенным параметрам и сортировать.

Начнем создавать


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


function create_post_type() { // создаем новый тип записи
register_post_type( 'reviews', // указываем названия типа
array(
'labels' => array(
'name' => __( 'Обзоры' ), // даем названия разделу, для панели управления
'singular_name' => __( 'Обзор' ) // даем названия одной записи
),
'public' => true,
'menu_position' => 5, // указываем место в левой баковой панели
'rewrite' => array('slug' => 'reviews') // указываем slug для ссылок например: http://mysite/reviews/
)
);
}

add_action( 'init', 'create_post_type' ); // инициируем добавления типа

И так что получилось, image
Обратите внимания на то что в левой панели появилась вкладка обзоры.

image

Как мы видим на этой картинке у нас появились пару проблем. заголовок все еще остался таким «Добавить запись» и нету возможности добавить обложку. Попробуем это исправить, для этого нам понадобится добавить пару параметров (полный список параметров ищите в кодексе ).
function create_post_type() { // создаем новый тип записи
register_post_type( 'reviews', // указываем названия типа
array(
'labels' => array(
'name' => __( 'Обзоры' ), // даем названия разделу для панели управления
'singular_name' => __( 'Обзор' ), // даем названия одной записи
'add_new' => _x('Добавить новый'),// далее полная русификация админ. панели
'add_new_item' => __('Добавить новый обзор'),
'edit_item' => __('Редактировать обзор'),
'new_item' => __('Новый обзор'),
'all_items' => __('Все обзоры'),
'view_item' => __('Просмотр обзора'),
'search_items' => __('Поиск обзора'),
'not_found' => __('Нет обзоров'),
'not_found_in_trash' => __('обзоры не найдены'),
'menu_name' => 'Обзоры'

),
'public' => true,
'menu_position' => 5, // указываем место в левой баковой панели
'rewrite' => array('slug' => 'reviews'), // указываем slug для ссылок например: http://mysite/reviews/
'supports' => array('title', 'editor', 'thumbnail', 'revisions') // тут мы активируем поддержку миниатюр
)
);
}

add_action( 'init', 'create_post_type' ); // инициируем добавления типа

Результат:
image
И так, теперь мы полностью исправили русификацию и сделали возможным прикрепления миниатюр к нашему новому типу записи. теперь мы можем создать шаблон который будит показывать наши записи.

Loop


Если честно, мне приходят в голову два способа отображения нового типа записи. и так примеры:
Первый способ: использовать шаблонный файл, допустим тип новой записи называется 'reviews', в этом слачае мы создаем файл под названием archive-reviews.php для отображения множество записей и single-reviews.php для отображения одной записи (оффтоп. приятный пример иерархии всех шаблонов прекрасно отображён на данной инфограме) далее мы используем простой код итерации по записям:
<?php while ( have_posts() ) : the_post(); ?>стандартная итерация по массиву
the_title();// заголовок
php the_post_thumbnail(array(150,150)); //получаем миниатюру записи
echo '';
the_content();// запись
echo '';
endwhile;

Второй способ: вызов лупа из любой части шаблона,
$args = array( 'post_type' => 'reviews', 'posts_per_page' => 10 );//тут мы указываем на тип записи по которой желаем пройтись и количество записей на одной странице
$loop = new WP_Query( $args );// получаем результат запроса в переменное loop
while ( $loop->have_posts() ) : $loop->the_post(); // далее стандартная итерация по массиву
the_title();// заголовок
php the_post_thumbnail(array(150,150)); //получаем миниатюру записи
echo '';
the_content();// запись
echo '';
endwhile;


надеюсь вам понравилось и статья была полезной, все же первый пост. с появлением столь простого инструмента, wordpress стал полноценным cms хотя все еще позиционирует себя как блог.

В следующий раз я хотел бы раскрыть такую прекрасную функцию как Taxonomies и custom fields

Источники и вдохновители:
Wordpress codex
Wptuts
Tags:
Hubs:
You can’t comment this publication because its author is not yet a full member of the community. You will be able to contact the author only after he or she has been invited by someone in the community. Until then, author’s username will be hidden by an alias.