Как создать свой собственный список событий, используя пользовательские типы сообщений в WordPress
Одним из преимуществ использования WordPress является его абсолютная гибкость. Это касается не только сообщений и страниц: настраиваемые типы сообщений могут расширить основные функции практически на все.
Давайте сегодня посмотрим, что вы можете делать с настраиваемыми типами сообщений, а также краткий практический пример того, как создать список событий, используя настраиваемый тип сообщения под названием Event.
Примечание: это руководство следует рассматривать только в образовательных целях, чтобы вы могли изучить код, используемый для создания пользовательских типов сообщений. Если вам действительно нужен отличный плагин для вывода списка событий для вашего сайта WordPress, попробуйте The Events Calendar , который хорошо разработан и бесплатен.
Что такое пользовательские типы записей в WordPress?
Обычно сайт WordPress состоит из двух типов контента: датированных сообщений в блогах и статических страниц. Большинство из нас, кто создал блог WordPress , знакомы с тем фактом, что страницы следует использовать для таких вещей, как «Обо мне» или «Контактная информация», в то время как обычные сообщения попадают в ваш блог.
Но помимо этого, что, если вы хотите добавить еще один особый вид контента, который не вписывается в хронологический порядок блога и уж точно не статичен? Вот тут-то и пригодятся пользовательские типы сообщений.
Довольно частая просьба для клубных или групповых сайтов – иметь какой-то календарь событий. Одно из решений, которое можно применить, – это создать отдельную категорию сообщений «События». Проблема в том, что они будут отображаться на основной временной шкале блога, и нам действительно следует полностью разделить эти две концепции.
Для этого давайте создадим новый тип сообщения под названием event, который будет иметь свой отдельный раздел в интерфейсе администратора.
Как создать собственный тип сообщения в WordPress
Мы сделаем это, настроив файлы вашей темы напрямую. Вы можете добиться того же эффекта с помощью плагина, но для демонстрации концепции и практики проще написать их напрямую. Если вам неудобно это делать, подумайте об использовании плагина My Custom Functions , который позволяет добавлять код неразрушающим образом.
Откройте файл functions.php вашей темы, хранящийся в папке темы внутри wp-content / themes ; или используйте плагин My Custom Functions, который вы найдете в разделе «Настройки» > « PHP Inserter» . В конце файла добавьте этот код:
add_action('init', 'events_init');
function events_init() {
$args = array(
'labels' => array(
'name' => __('Events'),
'singular_name' => __('Event'),
),
'public' => true,
'has_archive' => true,
'rewrite' => array("slug" => "events"),
'supports' => array('thumbnail','editor','title','custom-fields')
);
register_post_type( 'events' , $args );
}
Обязательно сделайте это перед закрывающим тегом php ( ?> ), Если он есть в вашем файле functions.php .
Найдите время, чтобы прочитать код. Он объявляет некоторые свойства (например, метки для интерфейса) и то, как должны обрабатываться URL-адреса (перезаписи), а также какие функции поддерживает этот пост-тип. Вы можете, например, добавить настраиваемое поле в свой настраиваемый тип сообщения с помощью свойства supports.
В этом случае мы объявили наш тип события для поддержки эскизов, редактора содержимого для описания события, заголовка события и настраиваемых полей. Мы также добавили has_archive , чтобы при переходе на страницу событий отображался архив всех событий, как в блоге.
Вот и все, теперь, если вы сохраните свою тему и перезагрузите свой блог, при условии, что у вас нет ошибок, вы должны увидеть новый раздел событий на боковой панели администратора. Ура!
![](https://static1.makeuseofimages.com/wp-content/uploads/2019/03/events-in-admin.png)
Теперь добавьте несколько примеров событий.
![](https://static1.makeuseofimages.com/wp-content/uploads/2019/03/add-some-events.png)
Затем, поскольку это событие, создайте настраиваемое поле с именем date, чтобы указать, когда произойдет событие. Используйте формат мм / дд / гггг .
![](https://static1.makeuseofimages.com/wp-content/uploads/2019/03/custom-field-date-value.png)
Обратите внимание, что нам нужно использовать настраиваемые поля, чтобы указать фактическую дату события, а не дату публикации, поскольку дата публикации соответствует дате публикации уведомления. Поскольку вы, вероятно, добавляете события, которые произойдут в будущем, установка даты публикации на фактическую дату события будет бесполезной.
Если вы попытаетесь просмотреть событие на этом этапе, вы можете получить ошибку 404. Это связано с тем, что WordPress необходимо регенерировать структуру URL-адресов постоянной ссылки, чтобы учесть этот новый тип публикации. Перейдите на страницу « Настройки»> «Постоянные ссылки» и снова нажмите «Сохранить».
Теперь у вас должна быть возможность просмотреть отдельную запись о событии. Обратите внимание, что первая часть URL-адреса после вашего доменного имени – / events / . Мы выбрали это в этой строке кода:
'rewrite' => array("slug" => "events"),
Настройте страницу со списком событий
Теперь, когда у вас в блоге есть все эти фантастические события, было бы неплохо их где-нибудь перечислить. Для этого мы создадим специальный шаблон страницы, чтобы затем вы могли добавить эту страницу в свои обычные пункты меню рядом с «О нас» или «Контакты».
Поскольку мы уже указали, что тип сообщения «Событие» должен иметь архив, вы можете продолжить и посмотреть, что используется по умолчанию, посетив / events / . На стандартной теме Twenty-Seventeen на моем тестовом сайте я получил следующее:
![](https://static1.makeuseofimages.com/wp-content/uploads/2019/03/events-on-front-end.png)
Настройка этого вывода будет зависеть от того, какую тему вы используете, и охват всей системы шаблонов WordPress выходит далеко за рамки этой статьи. Однако в рамках этого руководства я предполагаю, что вы используете Twenty-Seventeen.
Начните с создания копии archive.php и переименуйте ее в archive-events.php . Это стандартное соглашение об именах, которое означает, что WordPress будет автоматически использовать этот шаблон для отображения архива для типа сообщения о событиях.
Изучив файл, авторы Twenty-Seventeen предоставили механизм формата публикации, который слишком сложен для наших нужд:
/*
* Include the Post-Format-specific template for the content.
* If you want to override this in a child theme, then include a file
* called content-___.php (where ___ is the Post Format name) and that will be used instead.
*/
get_template_part( 'template-parts/post/content', get_post_format() );
Примечание. Рекомендуется использовать дочернюю тему, так как любые обновления исходной темы перезапишут ваши изменения. В этой статье поддержки WordPress описывается процесс создания дочерней темы для Twenty-Seventeen. Для краткости я просто буду работать над исходной темой, и мне все равно, потеряна ли моя работа в более позднем обновлении.
Вырежьте весь блок и вставьте вместо него следующее. Это просто упрощенная копия того, что находится в этих шаблонах форматов сообщений, ради обучения:
<article>
<header class="entry-header">
<?php echo '<div class="entry-meta">'.twentyseventeen_time_link().'</div>';
the_title( '<h2 class="entry-title"><a href="' . esc_url( get_permalink() ) . '" rel="bookmark">', '</a></h2>' );?>
</header>
<?php if ( '' !== get_the_post_thumbnail() && ! is_single() ) : ?>
<div class="post-thumbnail">
<a href="<?php the_permalink(); ?>">
<?php the_post_thumbnail( 'twentyseventeen-featured-image' ); ?>
</a>
</div>
<?php endif; ?>
<div class="entry-content">
<?php the_content(sprintf('Continue reading<span class="screen-reader-text"> "%s"</span>',get_the_title()));?>
</div>
</article>
Если вы снова сохраните и просмотрите страницу событий, вы заметите, что теперь на ней есть даты. Но они ошибаются. В настоящее время они показывают дату публикации вместо даты события. В качестве последнего шага давайте изменим это на фактическую дату проведения мероприятия. Найдите бит, который генерирует время,
twenty_seventeen_time_link()
, и замените его следующим:
date('l jS F Y',strtotime(get_post_meta(get_the_ID(), 'date', true)))
Это получение даты из установленного нами мета-поля сообщения, а затем использование функции PHP date () для форматирования ее в более удобочитаемом виде.
![](https://static1.makeuseofimages.com/wp-content/uploads/2019/04/events-now-with-date.png)
Следующие шаги?
Если вас не устраивает ваш текущий веб-хостинг, мы настоятельно рекомендуем использовать управляемый хост WordPress, такой как WP Engine , который мы сами используем для наших дочерних сайтов. В противном случае InMotion Hosting предлагает доступные планы, которые еще дешевле с нашей специальной скидкой, когда вы используете эту ссылку .
Затем обратите внимание, что при создании типа сообщения о событии мы уже закодировали поддержку избранных миниатюр. Используйте наше руководство по избранным изображениям и миниатюры публикаций, чтобы захватить и отобразить избранные изображения в архиве списка событий.