如何使用WordPress中的自定义帖子类型制作自己的事件列表

使用WordPress的优点之一是其绝对的灵活性。这不仅适用于帖子和页面:自定义帖子类型可以将核心功能扩展到几乎所有内容。

今天让我们看一下如何使用自定义帖子类型,以及如何使用名为Event的自定义帖子类型创建事件列表的快速实用示例

注意:本教程仅应用于教育目的,因此您可以学习用于创建自定义帖子类型的代码。如果您实际上想要为您的WordPress网站提供出色的事件列表插件,请尝试功能完善且免费的The Events Calendar

WordPress中的自定义帖子类型是什么?

通常,WordPress网站包含两种类型的内容:带日期的博客文章和静态页面。我们大多数建立WordPress博客的人都熟悉这样的事实,即页面应用于诸如“关于我”或“联系信息”之类的内容,而常规帖子会进入您的博客。

但是除此之外,如果您想添加另一种与博客时间顺序不符并且肯定不是静态的特殊内容,该怎么办?这就是自定义帖子类型的来源。

对俱乐部或团体网站的一个相当普遍的要求是拥有某种事件日历。可以应用的一种解决方案是创建单独的事件类别的帖子。问题在于它们将显示在博客主时间轴中,我们确实应该将这两个概念完全分开。

为此,让我们创建一个称为event的新帖子类型,它将在管理界面中有其自己的单独部分。

如何在WordPress中创建自定义帖子类型

我们将通过直接调整主题文件来实现。您可以通过插件实现相同的效果,但是要演示概念和实践,直接编写它们会更容易。如果您不习惯这样做,请考虑使用“我的自定义功能”插件,该插件可让您无损添加代码。

My Custom Functions

打开您的主题的functions.php文件,该文件存储在wp-content / themes的主题文件夹中;或使用“我的自定义功能”插件,您可以在“设置” >“ PHP插入程序”中找到该插件。在文件末尾,添加以下代码:

 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 );
}

如果您的functions.php文件中有一个标记,请务必在结束php( ?> )标记之前执行此操作。

花一点时间阅读代码。它声明了一些属性(例如接口的标签),以及如何处理URL(重写),以及此post-type支持的功能。例如,您可以使用supports属性将自定义字段添加到自定义帖子类型。

在这种情况下,我们声明了事件类型以支持缩略图,事件描述的内容编辑器,事件标题和自定义字段。我们还添加了has_archive ,以便导航到事件页面将调出所有事件的存档,类似于博客。

就是这样,现在,如果您保存主题并重新加载博客,则假设您没有任何错误,现在应该在管理侧边栏中看到一个新的事件部分。耶!

现在添加一些示例事件。

然后,由于这是一个事件,因此创建一个名为date的自定义字段以指示该事件何时发生。使用mm / dd / yyyy格式。

请注意,我们需要使用自定义字段来指定事件的实际日期而不是发布日期,因为发布日期表示通知的发布时间。由于您可能要添加将来发生的事件,因此将发布日期设置为实际事件日期将毫无用处。

如果您此时尝试查看事件,则可能会收到404错误。这是因为WordPress需要重新生成您的永久链接URL结构,以解决此新帖子类型。转到“设置”>“永久链接”页面,然后再次单击“保存”。

现在,您应该能够查看单个事件的帖子。请注意,URL的第一部分在您的域名之后是/ events / 。我们在以下代码行中选择了此代码:

 'rewrite' => array("slug" => "events"),

自定义事件列表页面

既然您在博客中拥有所有这些奇妙的事件,那么将它们实际列出在某个地方会很好。为此,我们将创建一个特殊的页面模板,因此您可以将该页面添加到“关于”或“联系人”旁边的常规菜单项中。

由于我们已经指定了Event帖子类型应具有存档,因此您可以访问/ events /继续查看默认值。在测试站点上的标准“二十七”主题上,我得到了:

自定义此输出将取决于您使用的主题,并且涵盖整个WordPress模板系统超出了本文的范围。但是,出于本教程的考虑,我假设您使用的是第二十七岁。

首先创建archive.php的副本,然后将其重命名为archive-events.php 这是一个标准的命名约定,这意味着WordPress将自动使用此模板来显示事件发布类型的档案。

在检查了文件之后,二十七位作者提供了一种后格式机制,对于我们的需求而言,该机制太复杂了:

 /*
* 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支持文章描述了为第二十七岁创建子主题的过程。为简便起见,我将只处理原始主题,而不关心以后的更新中是否丢失了我的作品。

切掉整个块,然后粘贴以下内容。这只是这些帖子格式模板中内容的简化副本,以供学习:

 <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)))

这是从我们设置的post meta字段中获取日期,然后使用PHP date()函数将其格式化为更易读的格式。

下一步?

如果您对当前的Web主机不满意,我们强烈建议使用托管的WordPress主机,例如WP Engine ,我们自己将其用于姐妹网站。否则,InMotion Hosting提供负担得起的计划,如果您使用此链接,我们的特别折扣甚至更便宜。

然后,请注意,当我们创建事件发布类型时,我们已经编码了对特色缩略图的支持。使用我们的指南来精选图片并发布缩略图,以在事件列表存档中获取并显示精选图片。