个性化阅读
专注于IT技术分析

如何在WordPress中创建独家自定义分类法

本文概述

WordPress是功能最强大的开源博客和内容管理系统之一, 正被用来驱动大量的互连网。多达四分之一的网站都运行WordPress, 并且对WordPress开发服务的需求并不短缺。

与许多其他CMS不同, WordPress因其灵活性和可定制性而受到许多人的喜爱。分类法是WordPress的核心功能之一, 可让你按照需要的方式组织内容。尽管WordPress内置了一些默认分类法, 但WordPress允许你随意添加尽可能多的自定义分类法。

但是, 要使分类法完全按照你希望的方式运行, 可能需要你弄弄一些未记录的方法。

各种WordPress分类标准选项的图形表示

在本文中, 你将学习如何在WordPress中定义排他的自定义分类法, 其行为更像是类别而不是标签, 从而使你对开箱即用的分类更加严格。

什么是分类法?

根据WordPress规范:

分类法是将事物组合在一起的一种方法。

例如, 可以根据各种特征将一堆不同类型的水果分组在一起, 然后可以为这些组分配名称。

在WordPress中, 分类法用于将帖子, 页面甚至自定义帖子类型分组到不同的组中。

分类法中不同组的名称称为术语。以水果为例, 并根据颜色将水果分组。在这种情况下, 将使用不同颜色的名称。

默认情况下, WordPress内置了四个分类法:类别, 标签, 链接类别和发布格式。你可以在此处了解有关这些默认分类法的更多信息。

在这些内置的分类法中, 类别和标签非常相似, 但有一个重要的区别:类别是排他的分类法(即, 对于每个帖子, 你最多可以选择一个类别), 而每个帖子可以分配多个标签。

此外, 类别通常是预定义的, 而标记可以随你定义。

定义自定义分类法

你可以使用register_taxonomy()函数定义自定义分类法。你可以在此处了解有关该功能的更多信息。

要查看此功能的工作原理, 让我们为带有风景照片的帖子定义自定义分类法。

function view_init() {
	register_taxonomy(
		'view', 'post', array(
			'label' => __( 'View' ), 'capabilities' => array(
				'assign_terms' => 'edit_guides', 'edit_terms' => 'publish_guides'
			)
		)
	);
}
add_action( 'init', 'view_init' );

在以上代码段中, 我们为称为View的帖子定义了一个新的分类法。

你可以考虑使用此分类法根据照片中所显示视图的种类或性质(例如, 山脉, 湖泊或森林)对照片进行分类。

与往常一样, 属于该类别特定术语的帖子将显示在/ view / {view_name}下。

上面片段中的功能行是可选的。没有它, WordPress将默认功能与帖子拥有相同的用户。如上所示, 这将允许具有自定义” edit_guides”功能的任何用户将分类法分配给帖子, 以及具有自定义” publish_guides”功能的任何用户来创建新分类法项目。

根据官方文档, 可以定义四种功能:

分类功能包括分配项, 编辑项, 管理项(在管理导航中显示分类)和删除项。

分类法的使用方法

在你的代码中, 你可以使用wp_set_object_terms()函数使用分类法向对象添加术语。你可以使用the_terms()函数列出现有的术语。此外, 你可以使用wp_tag_cloud()函数为你的自定义分类法生成术语云。你可以在此处了解有关这些功能的更多信息。

在用户界面方面, WordPress为每种分类法在帖子上创建一个新的元框。该元框类似于”标签”元框, 该框使你可以将一个或多个术语链接到你的帖子。这是WordPress默认情况下所做的, 这是我们可以通过使分类法独占而更改的方式:使自定义分类法的行为类似于类别分类法。

强制分类法的排他性

当我们使用register_taxonomy()方法创建自定义分类法时, WordPress会将带有多个项目选择的元框添加到帖子编辑页面:

使用此元框, 用户可以选择任意数量的现有(已使用)术语, 也可以使用文本框添加新术语。

要创建类似类别的分类法, 每个帖子最多属于一组预定义类别中的一个类别, 你可以通过稍微调整WordPress来做到这一点:

  • 隐藏WordPress创建的默认元框。
  • 在帖子编辑页面上创建一个自定义元框, 该框将提供用于单个项目选择的控件。
  • 保存帖子时保存分类法值。

让我们看一下每个步骤。

隐藏WordPress创建的默认元框

为此, 我们需要在调用register_taxonomy时将show_in_quick_edit和meta_box_cb选项设置为false。

自定义分类法元框的屏幕截图,你可以在其中将项目添加到可用术语集中

第一个选项将分类法隐藏在快速/批量编辑面板中, 第二个选项将其隐藏在后期编辑页面中:

register_taxonomy( 'custom_taxonomy', 'post', array(
	'labels' => array(
		'name' => 'Custom Exclusive Taxonomy'
	), 'show_in_quick_edit' => false, 'meta_box_cb' => false
));

隐藏默认元框时, 可以通过分类管理页面将项目添加到分类的可用术语集中:

带有几个单选按钮的名为Custom Exclusive Taxonomy的元框的屏幕截图

在帖子编辑页面上创建自定义元框

要创建一个自定义的meta框, 我们可以使用add_meta_boxes WordPress挂钩。你可以在此处了解有关钩子的更多信息。

add_action('add_meta_boxes', 'add_custom_meta_box');
function add_custom_meta_box(){
	add_meta_box( 'taxonomy_box', __('Custom Exclusive Taxonomy'), 'fill_custom_meta_box_content', 'post' , 'side');
}

我们使用以下参数调用add_meta_box方法:

  • taxonomy_box –元框的ID
  • __(“自定义专有分类法”)–元框的标题
  • fill_custom_meta_box_content –用于填充元框内容的函数
  • post –这表明meta框应出现在post edit页面上。
  • 侧边–指示应将元框插入的位置。

注意我们如何指定taxonomy_box作为ID。但是, 正是第三个参数中的函数可以让我们定义将要输入的内容。

现在, 我们将实现fill_custom_meta_box_content函数:

<?php
function fill_custom_meta_box_content( $post ) {
	$terms = get_terms( array(
		'taxonomy' => 'custom_taxonomy', 'hide_empty' => false // Retrieve all terms
	));

	// We assume that there is a single category
	$currentTaxonomyValue = get_the_terms($post->ID, 'custom_taxonomy')[0];
?>
	<p>Choose taxonomy value</p>
	<p>
		<?php foreach($terms as $term): ?>
			<input type="radio" name="custom_taxonomy" id="taxonomy_term_<?php echo $term->term_id;?>" value="<?php echo $term->term_id;?>"<?php if($term->term_id==$currentTaxonomyValue->term_id) echo "checked"; ?>>
			<label for="taxonomy_term_<?php echo $term->term_id;?>"><?php echo $term->name; ?></label>
			</input><br/>
		<?php endforeach; ?>
	</p>
<?php
}

在这里, 我们首先要检索分类法的所有术语(即现有值)。我们将使用它们来显示单选按钮控件的列表。

接下来, 我们使用get_the_terms()函数检索当前选择的分类法术语-我们需要它来选择各个单选按钮。

请注意, 此函数返回一个数组。这是因为, 默认情况下, 该帖子可以具有任意数量的关联词。根据我们的假设, 该帖子最多具有一个术语, 因此我们访问第一个数组元素。 (如果数组为空是可以的;我们将获得null作为当前值, 并且不会选择任何单选按钮。)

HTML发出的代码使用custom_taxonomy作为单选按钮的名称, 并使用相应的术语ID作为其值;单选按钮ID属性仅用于连接标签标签。结果, 我们得到以下自定义元框:

自定义独家分类标准的"添加新标签"功能的屏幕快照现已在WordPress仪表板侧栏上提供

保存帖子时保存分类法值

最后, 保存帖子时, 我们需要保留分类法值。为此, 我们可以使用save_post钩子:

add_action('save_post', 'save_custom_taxonomy');

function save_custom_taxonomy($post_id){
	if ( isset( $_REQUEST['custom_taxonomy'] ) ) 
		wp_set_object_terms($post_id, (int)sanitize_text_field( $_POST['custom_taxonomy'] ), 'custom_taxonomy');
}

就是这样!我们完了。

现在, 你知道如何定义自定义分类法, 其行为将类似于内置类别分类法。

注意:WordPress已接受功能请求, 以便更轻松地切换自定义分类法的排他性。但是, 该票已有一段时间没有看到太多活动了。

本文总结

分类法是WordPress中非常强大且有用的功能。开箱即用, 他们缺乏对帖子进行严格分类的能力, 但是与WordPress中的几乎所有其他内容一样, 分类法和相关功能是非常可定制的。这使我们可以在几个步骤中添加此通常必要的功能。

此处介绍的方法还可以用于在后编辑页面上创建用于分类术语选择的更多定制UI。

我希望你发现这个关于定义专有自定义分类法的快速教程很有用!

赞(0)
未经允许不得转载:srcmini » 如何在WordPress中创建独家自定义分类法

评论 抢沙发

评论前必须登录!