通常人们错误地将WordPress归类为博​​客平台。在过去几年中,WordPress已发展成为一个强大的内容管理系统。默认情况下,WordPress自带帖子和页面作为主要内容类型。但是,您可以根据需要创建任意数量的自定义内容类型,这些自定义内容类型称为自定义帖子类型。在本文中,我们将向您展示如何在WordPress中创建自定义帖子类型。我们还将向您展示如何像专业人士一样使用它们。

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

自定义帖子类型是帖子和页面等内容类型。由于WordPress从一个简单的博客平台演变为一个强大的CMS,因此术语帖子坚持下去。但是,帖子类型可以是任何类型的内容。默认情况下,WordPress附带以下帖子类型:

  • 发布
  • 页面
  • 附件
  • 修订版
  • 导航菜单

您可以创建自己的自定义帖子类型,并随意调用它们。例如,如果您运行电影评论网站,那么您可能想要创建电影评论帖子类型。此帖子类型可以有不同的自定义字段,甚至可以有自己的自定义类别结构帖子类型的其他示例包括:投资组合,推荐书,产品等。

我何时需要自定义帖子类型?

查看我们的文章,了解您何时需要自定义帖子类型或WordPress中的分类法。

您还会注意到我们正在使用自定义分类法而不是类别或标记。

创建自定义帖子类型 – 简单方法

在WordPress中创建自定义帖子类型的最简单方法是使用插件。建议初学者使用此方法,因为它安全且非常简单。

您需要做的第一件事是安装并激活Custom Post Type UI插件。激活后,插件将在WordPress管理菜单中添加一个名为 CPT UI 的新菜单项。

现在转到 CPT UI»添加新的以创建新的自定义帖子类型。

Custom Post UI plugin

Custom Post Type UI插件还允许您创建自定义分类。

这就是添加新自定义帖子类型页面分为两列的原因。在左侧,您需要填写表单以创建自定义帖子类型。在您的右侧,如果需要,您可以使用表单创建自定义分类。

在自定义帖子类型列中,首先需要为自定义帖子类型提供名称。此名称不得超过20个字符,例如电影,食谱,交易,词汇表等。

Adding your new custom post type

在下一个字段中,您需要为自定义帖子类型提供标签。此标签将显示在您的WordPress管理栏中,就像帖子和页面一样。它也需要复数才有意义。例如电影,食谱,交易,术语表等。

之后,您需要为您的标签提供单数形式。WordPress将使用这种单数形式来显示指令和其他用户界面元素。

最后输入自定义帖子类型的说明。此描述仅用于描述您的帖子类型的作用。

现在,您可以单击“创建自定义帖子类型”按钮添加新的自定义帖子类型。这就是全部。

您还可以单击“高级标签选项”和“高级选项”链接,为自定义帖子类型自定义更多选项。

手动创建自定义帖子类型

使用插件的问题是,当插件停用时,您的自定义帖子类型将消失。您在这些自定义帖子类型中的所有数据仍然存在,但您的自定义帖子类型将被取消注册,并且无法从管理区域访问。

如果您正在使用客户端站点但不想要要安装另一个插件,您可以通过在主题的functions.php文件或特定于站点的插件中添加所需的代码来手动创建自定义帖子类型(请参阅:自定义帖子类型辩论functions.php或插件)。

首先,我们将向您展示一个快速且完整的示例,以便您了解它的工作原理。看看这段代码:

// 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"),
		)
	);
}
// Hooking up our function to theme setup
add_action( "init", "create_posttype" );

这段代码的作用是注册一个帖子类型movies带有一组参数。这些参数是我们的自定义帖子类型的选项。这个数组有两个部分,第一部分是标签,它本身就是一个数组。第二部分包含其他参数,如公共可见性,存档和slug,将在此帖子类型的URL中使用。

现在让我们看一下详细的代码片段,为您的自定义帖子类型添加更多选项。

/*
* 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", "twentythirteen" ),
		"singular_name"       => _x( "Movie", "Post Type Singular Name", "twentythirteen" ),
		"menu_name"           => __( "Movies", "twentythirteen" ),
		"parent_item_colon"   => __( "Parent Movie", "twentythirteen" ),
		"all_items"           => __( "All Movies", "twentythirteen" ),
		"view_item"           => __( "View Movie", "twentythirteen" ),
		"add_new_item"        => __( "Add New Movie", "twentythirteen" ),
		"add_new"             => __( "Add New", "twentythirteen" ),
		"edit_item"           => __( "Edit Movie", "twentythirteen" ),
		"update_item"         => __( "Update Movie", "twentythirteen" ),
		"search_items"        => __( "Search Movie", "twentythirteen" ),
		"not_found"           => __( "Not Found", "twentythirteen" ),
		"not_found_in_trash"  => __( "Not found in Trash", "twentythirteen" ),
	);
	
// Set other options for Custom Post Type
	
	$args = array(
		"label"               => __( "movies", "twentythirteen" ),
		"description"         => __( "Movie news and reviews", "twentythirteen" ),
		"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"     => "page",
	);
	
	// 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 );

正如您所看到的,我们已经使用他的代码为自定义帖子类型添加了更多选项。它将添加更多功能,如支持修订,特色图像,自定义字段等。

我们还将此自定义帖子类型与名为genres的自定义分类相关联。另请注意我们将层次结构值设置为false的部分。如果您希望自定义帖子类型的行为与“页面”类似,则可以将此值设置为true。

另请注意重复使用二十三,这称为文本域。如果您的主题已准备好翻译并且您希望翻译自定义帖子类型,那么您需要提及主题使用的文本域。您可以在主题目录中的 style.css 文件中找到主题的文本域。文本域将在文件的标题中提及。

在您的站点上显示自定义帖子类型

WordPress内置支持显示您的自定义帖子类型。将新项目添加到新的自定义帖子类型后,就可以在您的网站上显示它们了。

您可以使用几种方法,每种方法都有其自身的优点。

使用默认存档模板显示自定义帖子类型

首先,您可以直接转到外观»菜单并为您的菜单添加自定义链接。此自定义链接是指向自定义帖子类型的链接。如果您使用的是SEO友好永久链接,那么您的CPT的URL很可能是这样的:

http://example.com/movies

如果您没有使用SEO友好永久链接,那么您的自定义帖子类型网址将是这样的:

http://example.com/?post_type = movies

将example.com替换为您自己的域名和电影与您的自定义帖子类型名称。保存您的菜单,然后访问您网站的前端。您将看到添加的新菜单,当您单击它时,它将使用主题中的archive.php模板文件显示您的自定义帖子类型存档页面。

CPT存档和单个条目使用自定义模板

如果您不喜欢自定义帖子类型的存档页面的外观,则可以使用专用模板进行自定义帖子类型存档。要做到这一点,您需要做的就是在主题目录中创建一个新文件,并将其命名为 archive-movies.php 。使用自定义帖子类型的名称替换影片。

对于启动geting,您可以将主题的 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;
}

不要忘记替换电影与您的自定义帖子类型。

查询自定义帖子类型

如果您熟悉编码并希望在模板中运行循环查询,那么这里是如何做到的(相关:什么是循环?)。

通过查询数据库,您可以从自定义帖子类型中检索项目。

<?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 wp_reset_postdata(); ?>
<?php else:  ?>
<p><?php _e( "Sorry, no posts matched your criteria." ); ?></p>
<?php endif; ?>

在此代码中,首先我们在新WP_Query类的参数中定义了post类型和每页的帖子。之后我们运行查询,检索帖子并在循环中显示它们。

在窗口小部件中显示自定义帖子类型

您会注意到WordPress中有一个默认窗口小部件可显示最近的帖子。但是这个小部件不允许您选择自定义帖子类型。如果您想在窗口小部件中显示新创建的帖子类型的最新条目,该怎么办?有一种简单的方法可以做到这一点。

您需要做的第一件事是安装并激活Ultimate Posts Widget插件。激活后,只需转到外观»窗口小部件并将Ultimate Posts窗口小部件拖放到侧边栏。

这个功能强大的小部件将允许您显示任何帖子类型的最新帖子。您还可以显示带有阅读更多链接的帖子摘录,甚至可以在帖子标题旁边显示特色图片。通过选择所需选项并选择自定义帖子类型来配置窗口小部件。之后保存更改并在您的网站上查看小部件。

更多高级自定义帖子类型调整

您可以使用自定义帖子类型进行更多操作。您可以学习在主RSS提要中添加自定义帖子类型,或为每个自定义帖子类型创建单独的提要。如果您正在使用Disqus评论系统,那么请查看如何在WordPress中为自定义帖子类型禁用Disqus。

我们希望本文能帮助您学习如何在WordPress创建自定义帖子类型

评论被关闭。