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

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

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

注意:该教程应仅出于教育目的考虑,因此您可以了解用于创建自定义帖子类型的代码。如果您实际上想要为您的WordPress网站提供出色的事件列表插件,请尝试开发并免费的事件日历。

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

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

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

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

为此,让我们创建一个名为event的新帖子类型,它将具有

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

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

我的自定义功能

打开主题的 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 );}

请确保在结束php(?>)标记之前执行此操作,如果您的 functions.php 文件。

花点时间阅读代码。它声明了一些属性(例如界面的标签),以及如何处理网址(重写),以及该后置类型支持的功能。例如,您可以使用supports属性将自定义字段添加到自定义帖子类型。

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

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

现在添加一些示例事件。

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

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

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

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

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

自定义事件列表页面

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

由于我们已经指定了事件发布类型应具有存档,因此您可以通过访问 / events / 查看默认设置。在我测试站点上的标准“二十一十七"主题上,我得到了这样的信息:

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

首先创建一个 archive.php 副本,然后将其重命名为< strong> 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)))

这是从帖子元获取日期字段,然后使用PHP date()函数将其格式化为更易读的格式。

下一步?

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

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

标签: Wordpress Wordpress插件