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


您想学习如何在 WordPress 中轻松创建自定义帖子类型吗?自定义帖子类型将 WordPress 网站从博客平台转变为强大的内容管理系统 (CMS).
基本上,它们允许您通过为您的网站创建不同的内容类型来超越帖子和页面.
在本文中,我们将向您展示如何在 WordPress 中轻松创建自定义帖子类型.我们将教您两种方法,您可以选择一种看起来更容易的方法.
WordPress 中的自定义帖子类型是什么?
自定义帖子类型是帖子和页面等内容类型.由于 WordPress 从一个简单的博客平台演变为一个强大的 CMS,因此术语 post 一直沿用至今.但是,帖子类型可以是任何类型的内容.
默认情况下,WordPress 带有以下帖子类型:
- 发布
- 页面
- 附件
- 修订
- 导航菜单
您可以创建自己的自定义帖子类型并随心所欲地称呼它们.
例如,如果您经营一个电影评论网站,那么您可能想要创建一个电影评论帖子类型.这种帖子类型可以有不同的自定义字段,甚至可以有自己的自定义类别结构.
帖子类型的其他示例包括作品集、推荐书、产品等.
许多流行的 WordPress 插件已经使用自定义帖子类型在您的 WordPress 网站上存储数据.以下是一些使用自定义帖子类型的顶级插件.
- WooCommerce – 将产品自定义帖子类型添加到您的 WordPress 网站.
- WPForms – 创建一个 wpforms 帖子类型来存储您的所有表单
- MemberPress – 添加 memberpressproduct 自定义帖子类型
我什么时候需要自定义帖子类型?
查看我们的文章,了解您何时真正需要 WordPress 中的自定义帖子类型或分类法.
另请查看 WPBeginner 的优惠和词汇表部分.这些是我们创建的自定义帖子类型,以使这些部分与我们的日常博客文章分开.它可以帮助我们更好地组织我们的网站内容.
您还会注意到,我们为它们使用了自定义分类法,而不是类别或标签.
话虽如此,让我们来看看如何在 WordPress 中轻松创建自定义帖子类型供您自己使用.
方法 1.创建自定义帖子类型 -简单方法
在 WordPress 中创建自定义帖子类型的最简单方法是使用插件.建议初学者使用此方法,因为它安全且超级简单.
您需要做的第一件事是安装并激活自定义帖子类型 UI 插件.激活后,该插件将在您的 WordPress 管理菜单中添加一个名为 CPT UI 的新菜单项.
现在转到CPT UI »添加新以创建新的自定义帖子类型.
首先,您需要为您的自定义帖子类型提供一个 slug.此 slug 将用于 URL 和 WordPress 查询,因此它只能包含字母和数字.
在此之下,您需要为自定义帖子类型提供复数和单数名称.
接下来,您可以选择单击"根据所选标签填充其他标签"的链接.这样做将填写下面的其余标签字段.
向下滚动到"其他标签"部分,您可以在此处提供帖子类型的说明并更改标签.
当您管理该特定帖子类型的内容时,将在整个 WordPress 用户界面中使用标签.
接下来是帖子类型设置选项.从这里您可以为您的帖子类型设置不同的属性.每个选项都带有简要说明,解释它的作用.
例如,您可以选择不使帖子类型像页面那样分层,也不像帖子那样按时间顺序排列.
在常规设置下方,您将看到用于选择此帖子类型支持哪些编辑功能的选项.只需检查您想要包含的选项.
最后,单击"添加帖子类型"按钮以保存并创建您的自定义帖子类型.
就是这样,您已成功创建自定义帖子类型.您可以继续并开始添加内容.
我们将在本文后面向您展示如何在您的网站上显示您的自定义帖子类型.
手动创建自定义帖子类型
使用插件的问题是当插件停用时,您的自定义帖子类型将消失.您在这些自定义帖子类型中拥有的任何数据仍然存在,但您的自定义帖子类型将被取消注册,并且无法从管理区域访问.
如果您在客户端站点上工作并且不想安装其他插件,那么您可以通过在主题的functions.php 文件或站点特定插件中添加所需代码来手动创建自定义帖子类型(请参阅: 自定义帖子类型辩论functions.php or Plugin).
首先,我们将向您展示一个快速且完整的示例,以便您了解它的工作原理.看看这段代码:
//Our custom post type function function create_posttype() { register_post_type( 'movies', //CPT Options array( 'labels' => array( 'name' => __( 'Movies' ), 'singular_name' => __( 'Movie' ) ), 'public' => true, 'has_archive' => true, 'rewrite' => array('slug' => 'movies'), 'show_in_rest' => true, ) ); } //Hooking up our function to theme setup add_action( 'init', 'create_posttype' );
这段代码的作用是注册一个带有参数数组的帖子类型 'movies'
.这些参数是我们自定义帖子类型的选项.
这个数组有两部分,第一部分是标注的,它本身就是一个数组.第二部分包含其他参数,如公共可见性、存档、slug 和 show_in_rest 启用块编辑器支持.
现在让我们看一段详细的代码,它为您的自定义帖子类型添加了更多选项.
/* * Creating a function to create our CPT */ function custom_post_type() { //Set UI labels for Custom Post Type $labels = array( 'name' => _x( 'Movies', 'Post Type General Name', 'twentytwenty' ), 'singular_name' => _x( 'Movie', 'Post Type Singular Name', 'twentytwenty' ), 'menu_name' => __( 'Movies', 'twentytwenty' ), 'parent_item_colon' => __( 'Parent Movie', 'twentytwenty' ), 'all_items' => __( 'All Movies', 'twentytwenty' ), 'view_item' => __( 'View Movie', 'twentytwenty' ), 'add_new_item' => __( 'Add New Movie', 'twentytwenty' ), 'add_new' => __( 'Add New', 'twentytwenty' ), 'edit_item' => __( 'Edit Movie', 'twentytwenty' ), 'update_item' => __( 'Update Movie', 'twentytwenty' ), 'search_items' => __( 'Search Movie', 'twentytwenty' ), 'not_found' => __( 'Not Found', 'twentytwenty' ), 'not_found_in_trash' => __( 'Not found in Trash', 'twentytwenty' ), ); //Set other options for Custom Post Type $args = array( 'label' => __( 'movies', 'twentytwenty' ), 'description' => __( 'Movie news and reviews', 'twentytwenty' ), 'labels' => $labels, //Features this CPT supports in Post Editor 'supports' => array( 'title', 'editor', 'excerpt', 'author', 'thumbnail', 'comments', 'revisions', 'custom-fields', ), //You can associate this CPT with a taxonomy or custom taxonomy. 'taxonomies' => array( 'genres' ), /* A hierarchical CPT is like Pages and can have * Parent and child items.A non-hierarchical CPT * is like Posts. */ 'hierarchical' => false, 'public' => true, 'show_ui' => true, 'show_in_menu' => true, 'show_in_nav_menus' => true, 'show_in_admin_bar' => true, 'menu_position' => 5, 'can_export' => true, 'has_archive' => true, 'exclude_from_search' => false, 'publicly_queryable' => true, 'capability_type' => 'post', 'show_in_rest' => true, ); //Registering your Custom Post Type register_post_type( 'movies', $args ); } /* Hook into the 'init' action so that the function * Containing our post type registration is not * unnecessarily executed. */ add_action( 'init', 'custom_post_type', 0 );
如您所见,我们使用此代码为自定义帖子类型添加了更多选项.它将添加更多功能,例如支持修订、特色图片、自定义字段等.
我们还将此自定义帖子类型与称为流派的自定义分类法相关联.
您可能还会注意到我们将层级值设置为 false 的部分.如果您希望自定义帖子类型的行为类似于 Pages,则可以将此值设置为 true.
另一件需要注意的事情是二十二十个字符串的重复使用,这称为文本域.如果您的主题已准备好翻译,并且您希望翻译自定义帖子类型,则需要提及主题使用的文本域.
您可以在主题目录的 style.css
文件中找到主题的文本域.文本域将在文件的标题中提及.
在您的网站上显示自定义帖子类型
WordPress 内置支持显示您的自定义帖子类型.将一些项目添加到新的自定义帖子类型后,就可以在您的网站上显示它们了.
您可以使用多种方法,每种方法都有自己的好处.
使用默认存档模板显示自定义帖子类型
首先,您只需转到外观 » 菜单,然后将自定义链接添加到您的菜单中.此自定义链接是指向您的自定义帖子类型的链接.
如果您使用 SEO 友好的永久链接,那么您的 CPT 的 URL 很可能是这样的:
http://example.com/movies
如果您没有使用 SEO 友好的永久链接,那么您的自定义帖子类型 URL 将如下所示:
http://example.com/?post_type=movies
不要忘记将 example.com 替换为您自己的域名,并使用您的自定义帖子类型名称替换电影.
保存您的菜单,然后访问您网站的前端.您将看到您添加的新菜单,当您单击它时,它将使用主题中的 archive.php 模板文件显示您的自定义帖子类型存档页面.
为 CPT 档案和单个条目使用自定义模板
如果您不喜欢自定义帖子类型的存档页面的外观,那么您可以使用专用模板进行自定义帖子类型存档.
要做到这一点,您只需在主题目录中创建一个新文件并将其命名为 archive-movies.php
.用您的自定义帖子类型的名称替换电影.
首先,您可以将主题 archive.php
文件的内容复制到 archive-movies.php
模板中,然后开始修改它以满足您的需要.
现在,无论何时访问自定义帖子类型的存档页面,都会使用此模板来显示它.
同样,您也可以为帖子类型的单条目显示创建自定义模板.为此,您需要在主题目录中创建 single-movies.php
.不要忘记用您的自定义帖子类型的名称替换电影.
您可以先将主题的 single.php
模板的内容复制到 single-movies.php
模板中,然后开始对其进行修改以满足您的需要.
在首页显示自定义帖子类型
使用自定义帖子类型的一个优点是它可以让您的自定义内容类型远离常规帖子.但是,如果您希望它们显示在您的常规帖子中,那么您可以通过将此代码添加到主题的 functions.php 文件或特定于站点的插件中来实现:
add_action( 'pre_get_posts', 'add_my_post_types_to_query' ); function add_my_post_types_to_query( $query ) { if ( is_home() && $query->is_main_query() ) $query->set( 'post_type', array( 'post', 'movies' ) ); return $query; }
不要忘记将 movies
替换为您的自定义帖子类型.
查询自定义帖子类型
如果您熟悉编码并希望在模板中运行循环查询,那么这里是如何做到的(相关:什么是循环?).
通过查询数据库,您可以从自定义帖子类型中检索项目.
<?php $args = array( 'post_type' => 'movies', 'posts_per_page' => 10 ); $the_query = new WP_Query( $args ); ?> <?php if ( $the_query->have_posts() ) : ?> <?php while ( $the_query->have_posts() ) : $the_query->the_post(); ?> <h2><?php the_title(); ?></h2> <div class="entry-content"> <?php the_content(); ?> </div> <?php endwhile; wp_reset_postdata(); ?> <?php else: ?> <p><?php _e( 'Sorry, no posts matched your criteria.' ); ?></p> <?php endif; ?>
在此代码中,首先,我们在新 WP_Query 类的参数中定义了帖子类型和每页帖子.
之后,我们运行查询,检索帖子并将它们显示在循环中.
在小部件中显示自定义帖子类型
您会注意到 WordPress 中有一个默认小部件来显示最近的帖子,但它不允许您选择自定义帖子类型.
如果您想在小部件中显示新创建的帖子类型中的最新条目怎么办?有一种简单的方法可以做到这一点.
您需要做的第一件事是安装并激活 Ultimate Posts Widget 插件.激活后,只需转到外观»小部件并将 Ultimate Posts 小部件拖放到侧边栏.
这个强大的小部件可让您显示来自任何帖子类型的最近帖子.您还可以显示带有阅读更多链接的帖子摘录,甚至在帖子标题旁边显示特色图片.
通过选择您想要的选项并选择您的自定义帖子类型来配置小部件.之后保存您的更改并在您的网站上查看小部件的运行情况.
更多高级自定义帖子类型调整
您可以使用自定义帖子类型做更多事情.您可以学习在主 RSS 提要中添加自定义帖子类型或为每个自定义帖子类型创建单独的提要.
要了解更多技巧,请参阅我们最有用的 WordPress 自定义帖子类型教程列表.
如果您正在寻找一种无代码解决方案来自定义您的自定义帖子类型存档页面,那么我们建议您查看 WordPress 页面构建器插件,例如 Beaver Builder 或 Divi,因为它们都可以帮助您做到这一点.
我们希望本文能帮助您了解如何在 WordPress 中创建自定义帖子类型.您可能还想查看我们的指南,了解如何通过实用技巧增加网站流量.