wordpress   /   155

WordPress 3.0五大新特征是WordPress为了迈向一个成功的内容管理系统努力的印证。之前,我们向大家介绍过WordPress3.0的新功能,自定义发布内 容的类型,这篇文章将继续给大家讲一下WordPress3.0另一个比较突出的新功能,自定义分类法。什么是自定义分类法函数,它的实用性表现 在哪里?究竟该如何使用?请看下面的教程:

分类法函数顾名思义就是使用不同的方法来对事物进行分类的函数。大家都知道按照不同的分类标准,对某种事物的分类就 会大相径庭,本教程将以台式电脑为例,依据下面完全不同的标准来分其结果就不一样:
  • 随机存储的容量
  • 硬盘驱动器的大小
  • CPU速度
  • CPU类型
  • 安装的操作系统
  • 等等

类别分类

WordPress Taxonomies1

WordPress2.3之前的版本只有一个最为普通的分类法函数, 叫做文章的“类别(Category)”。这个对于博客来说也还算过得去,因为你可以创建一个顶层分类“台式电脑”,一个子分类“RAM,”它同样也可以 有子子分类:“小于1 GB,” “1 GB,” “2 GB到4GB,” 等等。“台式电脑”下也可以创建一个叫做“操作系统的”第二个子分类,它下面的子子分类为“Windows XP,” “Mac OS,” “Red Hat,” “Ubuntu,”等等。

当某种系统允许你将分类进行再次分为各种子分类,我们称之为层级结构。在WordPress2.3之前的系统里,你 所能做到最好的就是创建一个庞大的分类层级,其中最高层代表最大的分类组。

标签分类法

WordPress Taxonomies2

WordPress2.3又增加了一种分类法,叫做标签,之前的分类通常都是事先想好了,具体到网站上内容的分类, 而标签显得更加自由,可以说是一种即兴分类内容的方法。

举个例子,在写一篇关于某个台式电脑的文章时,标签允许制作输入一个或多个关键词,如“游戏” 、“tivo功能” 、“嘈杂风扇”等等。像这些关键词可能并不适合于运用于整个网站内容的分类中,但是对某篇文章来说却是提供了另一种分类。网站访客以后就可以非常轻松找到 所有标记为“tivo功能”的文章。不过,标签的自由性却无法帮助我们创建一个固定的依据如操作系统、CPU类型值而做出的分类系统。因为标签是一维的, 不容许任何层级结构。

单级自定义分类法

WordPress Taxonomies3

WordPress2.8下,通过稍微修改网站的代码你可以添加自定义分类方案。这样你可以创建一个包含所有“操作系统”的文章列表,并与另一个包含所有 “随机存储器”的文章列表单独分开,当然还可以创建其他类似的列表。不过,它却无法像常见的“类别”分类法拥有内在的层级结构。

完全层次自定义分类法

WordPress Taxonomies4

最后,WordPress3上才可以拥有完全层级的自定义分类法。你将会发现这个完全层级自定义分类是多么强大,就拿操作系统来说,你可以将所有不同的 Windows变种放置到Windows父类别下。这样用户选择Windows操作系统的时候就可以看到所有相关的文章,而如果他们想只查找 Windows xp电脑相关的信息就可以选择Windows XP下的文章。

编辑主题functions.php文件

WordPress3无法在管理后台创建自定义的分类法。如果不使用插件初次定义一个自定义分类法时,你将需要在主 题 functions.php文件里添加点代码,其实也不难,跟着下面的指示就可以了。

在主题目录里找到“functions.php”文件,假设你使用的是WordPress3.0的默认主题 “twentyten”,WordPress是安装在一个叫做“wp.”的目录下,那么functions.php文件的路径就是:
[website_root]/wp/wp-content/themes/twentyten/functions.php.

在代码中添加分类法

仍然以台式电脑为例,我们需要单独添加“随机存储器”、“硬盘驱动器”和“操作系统”这样的分类。在这里,仅仅是添 加了分类法本身,也就是说设定完之后它们就像是一个“空的容器”,而你需要通过管理面板那命名管理不同分类,如“Windows XP”。

步骤一:使用一个函数创建所有的分类

首先,需要创建一个函数来创建所有需要的分类。这个函数叫做“build_taxonomies”,在 functions.php文件的底端添加这个函数:
function build_taxonomies() {      // 定义分类法的代码将写在这里 }

步骤二:定义分类法

接着,对于每个需要创建的分类法,我们需要启用某个WordPress函数以及正确的参数。下面就是该函数以及它相 关的重要参数的解释。
register_taxonomy( 'internal_name', 'object_type', array( 'hierarchical' =>
{true|false}, 'label' => 'Human Readable Name', 'query_var' =>
{true|false}, 'rewrite' => {true|false} ) );
  • internal_name: 在WordPress内部,数据库和模板文件中这个分类法究竟该怎么称呼就是靠这个函数来实现的。
  • object_type:什么类型的内容才可以用这个分类法进行分了呢?可能的值有:“文章(post), 页面(page)以及链接(link)”。
  • 接着就是一组可选择的参数。本教程就使用最为重要的几个参数,其他参数大家也可以在官方的引用函数/ register_taxonomy Codex页面上找到。我们将使用到的参数有:
  • hierarchical: 如果设置为”true”的话,意味着此分类法拥有的层级功能,就像WordPress“类别”的分类一样。反之,如果设置为‘false’,那么它就会像 标签一样灵活没有分层的制约。
  • label: 这是一个对用户可见的用户标记此分类法的一个标记。
  • query_var: 如果设置为‘true’,那么选择该分类法后,我们可以要求WordPress为我们选择相关的文章,例如,依据操作系统分类法,如果选择 “Windows”,WordPress系统就会为你列出所有Windows下的文章。
  • rewrite: 如果设置为‘true’,在浏览一个页面时,WordPress将会使用友好的URL地址。例如,选择Windows操作系统之后列出的文章列表页面的 URL地址将会是这样的:

添加操作系统分类法的代码如下:

register_taxonomy( 'operating_system', 'post', array( 'hierarchical' => true,
'label' => 'Operating System', 'query_var' => true, 'rewrite' => true ) );

请在前面提到的“build_taxonomies”函数里添加上面的代码。

更多信息:

第三步:调用Taxonomy-Creating函数

我们还需要在“functions.php”文件里添加几行代码,这样“build_taxonomies”函数才 可以真正执行,
add_action( 'init', 'build_taxonomies', 0 );

你可以在任何地方加这个代码,不过通常还是写在需要调用的函数前面比较好,代码就变成这样了:

//自定义分类法代码add_action( 'init', 'build_taxonomies', 0 );
function build_taxonomies() {      register_taxonomy
( 'operating_system', 'post', array( 'hierarchical' => true, 'label' =>
 'Operating System', 'query_var' => true, 'rewrite' => true ) );  }

正确在“functions.php”添加了“操作系统”这个分类法之后,在管理后台的“文章”选项就应该会出现一个新的“操作系统”分类条目,点击该分 类法名称,你就可以添加编辑所需要的类别。

像上图所示添加完所需的类别之后,你就可以像常见的文章分类目录一样对操作系统这个分类进行编辑。

如果你需要添加“随机存储器”和“硬盘驱动器”分类法,只要按照上面“操作系统”的例子做,并在 functions.php文件加入下面的代码:
register_taxonomy( 'ram', 'post', array( 'hierarchical' => true,
'label' => 'RAM', 'query_var' => true, 'rewrite' => true ) );
register_taxonomy( 'hard_drive', 'post', array( 'hierarchical' => true,
'label' => 'Hard Drive', 'query_var' => true, 'rewrite' => true ) );

完成之后,functions.php文件里的代码应该像下面这样:

// 自定义分类法代码  add_action( 'init', 'build_taxonomies', 0 );
function build_taxonomies() {  register_taxonomy( 'operating_system', 'post',
array( 'hierarchical' => true, 'label' => 'Operating System', 'query_var' => true,
'rewrite' => true ) );  register_taxonomy( 'ram', 'post', array( 'hierarchical' => true,
'label' => 'RAM', 'query_var' => true, 'rewrite' => true ) );
register_taxonomy( 'hard_drive', 'post', array( 'hierarchical' => true,
 'label' => 'Hard Drive', 'query_var' => true, 'rewrite' => true ) );  }
在创建一篇新的文章时,你就会发现在编辑文章的页面会出现新的分类法选项,你就可以旋转任何你需要使用到的分类。
到目前为止所做的一切对于网站的访客来说并没有太大的改善。我们希望能够显示某篇文章依据某种分类法所归属的类别, 就像文章的类别和标签那样显示出来。

为了实现这点,我们还需要做一点点改善。

在各个分类法的页面显示它们下面的类别

在twentyten以及其他很多主题中,在一篇文章的文本下方会显示该文章所属的类别和标签。 所以,下面我们打算如果某篇文章有使用了自定义的分类法对它进行分类的话,那么就在类别和标签的前面加上依据自定义分类法它所归属的分类。

为了实现这一点,我们需要对“single.php”模板文件进行一点修改,通常显示单篇文章都需要调用这个模板文件。single.php文件的路径 是: [website_root]/wp/wp-content/themes/twentyten/single.php.

第一步:找到添加代码的地方

打开single.php文件,找到下面这行代码:
<div class="entry-utility">

它的前面是:

<div id="nav-below">

In twentyten主题里面,div里包含了当前文章的所属类别、标签、永久链接以及其他数据。 我们将在这个div的前面添加自定义分类的信息。

第二步:获取当前文章的分类法信息

Populate some variables for holding the taxonomy information output and the different taxonomy information we may expect to find.
<?php  // 如果有自定义分类法信息就显示
// 创建输出的内容 $taxo_text = "";
// 变量来存储所有可能的分类法列表
// 检查“操作系统”这个类别
$os_list = get_the_term_list( $post->ID, 'operating_system', '
<strong>Operating System(s):</strong> ', ', ', '' );

在这里,需要调用WordPress函数“get_the_term”以及下面的参数:

* $post->ID : 当前文章的ID
* ‘operating_system’ : 我们的目标自定义分类,通过它来查询当前文章是否有被定义为“操作系统”分类法下的任何类别。
* ‘Operating System(s)’ : 如果得到数值返回,我们需要在它的前面加上这个字符串。
* ‘, ‘ : 如果返回多个数值,我们需要用这个符号来分隔开来。
* ” : 如果没有返回任何数值,我们希望在后面加上这个字符串。这样,结果后面就不需要添加任何东西。

同样地我们可以对其他两个分类法进行处理:

$ram_list = get_the_term_list( $post->ID, 'ram', '<strong>RAM Option(s):
</strong> ', ', ', '' );  $hd_list = get_the_term_list( $post->ID, 'hard_drive', '
<strong>Hard Drive Option(s):</strong> ', ', ', '' );

更多信息:

第三步:对类别的结果进行格式化(如果有)

先查询是否有这三个分类法下的类别。如果有的话,将这些类别信息以及字符串添加到输出结果中输出。
// Add OS list if this post was so tagged  if ( '' != $os_list )
{      $taxo_text .= "$os_list<br />";  }
// Add RAM list if this post was so tagged  if ( '' != $ram_list )
{      $taxo_text .= "$ram_list<br />";  }
// Add HD list if this post was so tagged  if ( '' != $hd_list )
{      $taxo_text .= "$hd_list<br />";  }

第四步:显示类别结果(如果有)

检查经过以上步骤是否会有分类法信息需要输出。如果分类法信息存在,我们将会通过类别div来输出结果。
// Output taxonomy information if there was any
// NOTE: We won't even open a div if there's nothing to put inside it.
if ( '' != $taxo_text ) {  ?>  <div class="entry-utility">
<?php  echo $taxo_text;  ?>  </div>  <?  } // endif  ?>

第五步:检查结果

查看文章,你将会发现所有的自定义分类法下的类别都会在文章的下方显示。

通过上面的几个操作,现在每篇文章如果它们有被分类到哪个自定义分类法下的某个类别,那么相关的类别都会显示出来 了。并且列出自定义分类法的类别的同时还会有一个链接能将你转到到某个类别下的所有文章列表页面。例如,点击操作系统分类法旁边的“Mac OS”链接,理论上所有的“Mac OS”类别的所有文章列表都将会呈现在你的眼前。

但是,在WordPress3.0中并没有像理论那样完美,我们还需要制作一个自定义的模板文件才能让文法归档成为 可能。在WordPress中,读者已经可以对指定某个 category和某个标签的所有文章进行浏览,当然我们也希望读者能够将所有自定义分类法下某个类别的文章也都能全部一览无余。

为了实现这一点,我们需要创建一个叫做 “taxonomy.php”的模板文件,当需要列出自定义分类法下面某个类别的文章时,可以随时使用这个文件。

第一步:

打开“category.php”模板文件,复制它的内容并将这些内容粘贴到一个新创建的命名为 “taxonomy.php”的文件中,保存这个taxonomy.php到主题目录下:
[website_root]/wp/wp-content/themes/twentyten/taxonomy.php.

第二步:获取当前分类法类别的相关信息

我们需要在taxonomy.php文件里能够获取被列出的分类法相关的信息。可能需要知道分类法下某个类别的名称 以及描述。

只要在

<?php get_header(); ?>

下方,添加下面的代码:

$term = get_term_by( 'slug', get_query_var( 'term' ),
get_query_var( 'taxonomy' ) );

第三步:显示类别名称和描述

有必要将页面的名称做些修改让访客知道他们在看的是什么样的内容。由于我们最开始也是从category.php 模板文件着手的,我们可以将用与打印分类名称的代码做些修改,就可以显示我们需要的页面名称,甚至是描述。

从category.php文件中修改下面的代码:

printf( __( 'Category Archives: %s', 'twentyten' ), '<span>' .
single_cat_title( '', false ) . '</span>' );

将其改成:

printf( __( 'Posts classified under: %s', 'twentyten' ),
'<span>' . $term_name . '</span>' );

这就修改了刚开始的静态文字,然后插入类别的名称。

添加下面的代码:

if ('' != $term_descr ) {  echo "<p>$term_descr</p>";  }

如果这个类别有描述,那么就会在标题的下方显示描述内容。

再完成对taxonomy.php的修改之后,访问下某篇授予某一个自定义分类法下的某个类别的文章,你将会看到文本的下方会有自定义类别显示,只要点击这些类别你就可以看到此类别的文章列表了。

希望这个教程能够帮助大家清楚地理解什么是自定义分类法,如何利用它将WordPress3.0充分利用好。

来源: 如何在WordPress 3.0中使用自定义分类法|wordpress啦!

网络发现者(aiwei.us)是梁道科技旗下以企业建站,微信开发,视觉设计为主要服务项目的互联网品牌。

我们为企业提供各类互联网平台项目的咨询顾问服务。依靠丰富的互联网实践经验,我们为企业从项目可行性分析,执行策略及方案等方方面面提供合理化建议。