WordPress数据库系列:理解和使用WordPress中的数据系列六(元数据)

307 阅读6分钟

这是我参与更文挑战的第16天,活动详情查看: 更文挑战

本篇翻译参考自Understanding and Working with Metadata in WordPress 它是理解和使用WordPress中的数据系列的第六篇

理解和使用WordPress中的元数据

到目前为止,在本系列中,我们已经研究了WordPress中的主要内容类型。但是关于所有这些内容的额外数据呢?

那就是元数据发挥作用的地方。

正如在本系列文章的前一部分所介绍的那样,WordPress具有四种主要的内容类型,它们存储在四个数据库表中:

  • posts
  • users
  • comments
  • links

其中的前三个可以分配有元数据,并且在数据库中都有一个自己的元数据表来存储。

什么是Metadata?

元数据可以描述为关于数据的数据。维基百科定义了两种类型的元数据:

  • 结构性元数据与数据结构的设计和规范有关,更恰当地称为"有关数据容器的数据"";
  • 描述性元数据与应用程序数据的各个实例有关,即有关数据内容。

Structural metadata is about the design and specification of data structures and is more properly called "data about the containers of data"; descriptive metadata, on the other hand, is about individual instances of application data, the data content.

结构性元数据:主要是描述对象的内部结构和关系,这些信息可帮助用户理解对象的内部结构,以及对象是如何被组织起来的。比如,图书的目录、章节等信息。结构性元数据一般包括:内部对象的顺序、位置、层次关系等信息。

描述性元数据:主要是描述对象的基本信息,这些信息有利于对象被发现和识别,一般包括标题,摘要,作者和关键字等要素。

元数据简介

通过定义可知,WordPress使用的是描述性元数据。在WordPress中定义什么作为数据和定义什么作为元数据,界限是比较模糊的,并且元数据并不直接等于存储在metadata表中的数据。例如:

  • 对于posts,post_type是元数据的示例,但它存储在wp_posts表中
  • 分类法项,分类目录(categories)和标签(tags)也可以宽松地定义为元数据,但是它们完全独立地存储在自己的数据库表中。
  • 如所期望的,通过插件添加的诸如自定义字段和额外元数据之类的Post元数据,都存储在wp_postmeta表中。

因此,不按照术语的严格定义来考虑WordPress中的元数据,而是看做存储在三个元数据表中的数据会更容易。

目前为四个元数据表。

Metadata表

WordPress使用四个数据库表用于元数据:

  • wp_postmeta存储关于posts(包括附件,导航菜单项和修订版本)的元数据。
  • wp_commentmeta存储关于评论的元数据
  • wp_usermeta存储关于用户的元数据
  • wp_termmeta存储有关分类法项的元数据

WordPress中唯一没有元数据的对象类型是链接。

元数据表几乎完全相同,因为它们只有四个字段:

  • ID是元数据相关的post、用户、评论或分类法项的ID
  • Meta ID是元数据记录的ID
  • Key是元键(meta key)(不同记录之间经常是重复的,这就是获取一个meta key的值是数组的原因,除非add_meta/update_meta第四个参数指定unique)
  • Value是元值(meta value)(往往是唯一的)

WordPress可以使用这种结构很简单的存储大量的元数据。这意味着用于显示和查询posts、users、comments和terms的元数据的函数非常相似。

WordPress存储的元数据

存储在单个WordPress安装中的元数据将不同于存储在另一个安装中的元数据,这是因为插件和主题可以添加自己的元数据,并且在某些站点中需要定义的特定元数据,在其他站点中则不需要。

但是,让我们看一些更常见的元数据类型:

  • 自定义字段(Custom Fields)。这些适用于posts,因此存储在wp_postmeta表中。可以使用标准的“自定义字段”接口或在post编辑屏幕中创建自己的元框(metaboxes)来添加它们。

当希望用户能够将元数据添加到特定的post类型,并且希望界面尽可能对用户友好时,这将特别有用。

  • 用户元数据(User Metadata)wp_usermeta表存储有关用户的元数据,例如角色(roles),能力(capabilities),仪表板设置(dashboard settings),甚至姓和名(first and last names)。

  • 插件和主题添加的元数据(Metadata added by plugins and themes)。具有评论功能的插件(例如Akismet)将向wp_commentmeta表添加元数据,而允许将元数据添加到posts的插件(例如SEO插件)会将记录添加至wp_postmeta表。理论上可以通过主题添加元数据,但是在插件中执行此操作更有意义,因为这些元数据通常与功能和不需要显示的内容有关。

当然,不限于列表中的这些类型。实际上,任何无法存储在对应的主数据库表中的,有关posts、评论、用户和分类法项的数据都将存储在相关的元数据表中。

如果要添加新字段来存储数据,则应始终使用这些表,而不要用核心表。

访问和输出元数据

WordPress有一组Metadata API可以添加、修改、获取和删除元数据。

有多种特定于每种元数据类型的函数,可以在模板文件中输出元数据:应该使用这些函数,而不是任何通用的元数据函数。

每种类型的元数据API函数都非常相似,并且具有相同的参数:

添加元数据获取元数据更新元数据删除元数据
Postsadd_post_meta()get_post_meta()update_post_meta()delete_post_meta()
Usersadd_user_meta()get_user_meta()update_user_meta()delete_user_meta()
Commentsadd_comment_meta()get_comment_meta()update_comment_meta()delete_comment_meta()
Termsadd_term_meta()get_term_meta()update_term_meta()delete_term_meta()
Parameters$post_id/$user_id/$comment_id/$term_id, $meta_key, $meta_value, $unique(可选)$post_id/$user_id/$comment_id/$term_id, $meta_key, $single(可选),$post_id/$user_id/$comment_id/$term_id, $meta_key, $meta_value, $prev_value(可选)$post_id/$user_id/$comment_id/$term_id, $meta_key, $meta_value(可选)

这些函数可以在模板文件和插件中使用,例如,在主题的单个post模板中,可以使用以下内容输出有关post的元数据:

<?php 
$metavalue = get_post_meta( get_the_ID(), 'my_meta_key' true);
// check if the custom field has a value
if ( ! empty( $metavalue ) ) {
  echo $metavalue;
} 

这只是输出某些元数据的一种非常简单的方法——还有更多的可能性,在本系列的后面部分将介绍其中的一些内容。

概要

WordPress使用四个元数据表来存储有关四种内容类型的数据:posts, users, comments和terms。这些表适用于不能保存在核心wp_postswp_userswp_commentswp_terms表中的任何内容,如果要通过主题或插件添加新字段,则应将数据写入这些表。这三个表几乎以相同的方式工作,并且具有非常相似的函数,可用于添加、更新、删除和获取元数据。

正如上面提到的,分类法项可以看作是WordPress中的另一种元数据类型,这些将在本系列的下一部分中介绍。