使用自定义字段

0条评论

WordPress允许日志撰写者为日志分派自定义字段。此额外的任意信息即是元数据(meta-data)。该元数据可以包括的信息如下:

  • 心情:愉快
  • 正在阅读:灰姑娘
  • 正在聆听:终日摇滚
  • 天气:湿热

使用额外的编码就可以完成较复杂的动作,例如使用元数据来存储某日志的过期日期。

元数据是由key/value对(pair)处理的。key是元数据元素的名称,而value则是与信息相关的在各日志上元数据列表中出现的信息。

Key在一篇日志中可多次使用。比如,如果你正在读两本不同类型的书(比如在工作中需要阅读某本技术书籍,而在家则是读小说),那么你就可以创建一个"正在阅读"的key,然后可以在同一篇日志中使用两次,即一个类型的书使用一次。

这里给出此信息的样例:

正在阅读:凯文的幻虎世界

今日心情:愉悦

用法

基于上面给出的例子,让我们将其付诸实践吧。我们要添加两个自定义字段,一个是"正在阅读",还有一个就是"今日心情"了。以下将指导你使用自定义字段将此信息添加至日志。

  1. 在写好日志后,下拉到写有自定义字段Custom Fields)的地方。
  2. 现在来创建名为"正在阅读"的自定义字段,在标为Key的文本输入区中输入文本"正在阅读"(不要带引号)。
  3. 现在就要为新建的Key分派一个Value了,在我们的例子中就是正在读的书的名字,即"凯文的幻虎世界"。在Value字段中输入"凯文的幻虎世界",不要带引号。
  4. 点击添加自定义字段(Add Custom Field)按钮来保存该日志的此条自定义信息。

添加"今日心情"的方法如上,重复套用即可。向key添加"今日心情",并在value文本框内输入你今天的心情,然后点击保存(SAVE)即可。

在下一篇日志中,你就可以向元数据添加新书还有新的心情了。在自定义字段(Custom Fields)部分中,之前输入的自定义字段Key呈下拉列表的样式。选择"正在阅读"然后在value中输入正在阅读的新书书名。点击添加自定义字段(Add Custom Field)重复该步继续进行"今日心情"的添加就可以了。

你仅需要新建"KEY"一次,在此之后你可以针对每篇文章为该key分派一个value。你还可以为某个key分派多个Value。如果某人同时阅读多本书籍的话,这就变得有用了。

显示自定义字段

添加完自定义字段后就要将它们显示出来。要显示各日志的自定义字段,需要使用the_meta()模板标签。该标签必须位于WordPress主循环(loop)中才能起作用。许多人将the_meta()模板标签添加到日志结尾或日志元数据部分。这里给出使用<?php the_meta(); ?>标签的基本例子

在源代码中看起来如下:

<ul class='post-meta'>
<li><span class='post-meta-key'>正在阅读:</span> 凯文的幻虎世界</li>
<li><span class='post-meta-key'>今日心情:</span> 愉悦</li>
</ul>

模板标签将整个元数据自动添加到名为post-meta的CSS风格中。key位于名为post-meta-keyspan中,因此你可以在风格页中进行风格定义。所有这些都在未经排序的列表中给出。

要自定义post-meta列表的外观,就需要修改风格页中的特点。那就让我们向例子中添加一些风格吧。风格页元素看起来如下:

.post-meta {font-variant: small-caps; color: maroon; }
.post-meta-key {color: green; font-weight: bold; font-size: 110%; }
  • 正在阅读:凯文的幻虎世界
  • 今日心情:愉悦

WordPress官方插件目录中还有很多类似的WordPress插件,它们能够为元标签的显示提供更多更棒的特色。用Google搜索自定义字段插件也能找到更多类似插件的。

自定义字段的相关进阶技巧

以下给出元数据及自定义字段获取和定制相关的进阶技巧。

获取自定义字段

要获取元数值,请使用get_post_meta()函数:

 get_post_meta($post_id, $key, $single);
  • $post_id 是元数值用于的日志ID。使用 $post->ID 来获取某日志的ID。
  • $key 字串含有所需元数值的名称。
  • $single 可以为true 或 false。如果设为true,函数就会返回单个字串形式的结果。如果是false,或没有进行设定的话,函数就会返回自一个定义字段的数组。

细节

PostMeta信息是保存在一个新表中的,即$wpdb->postmeta。该表含有4个字段

meta_id: 各文章的唯一id
post_id: 该元数据对应日志的ID
meta_key: 'key'的名称
meta_value: 与key相关联的数值

该表的数据被拉入一个名为$post_meta_cache的具有结构的多维数组中,此行为就发生在 $posts数组于 wp-blog-header.php中被获取之后。此变量将仅含有为当前页面获取的日志列表的数值。该数组的结构看起来如下:

 [
   postid1 => [
     [
       key1 => [val1, val2, ...],
       key2 => [val1, val2, ...],
       ...
     ],
   postid2 => [ ... ],
   ...
 ]

因此,如果你想从第256号日志中获取"正在阅读"的数值,就要使用如下的PHP代码:

 // 获取我正在阅读书籍的数值数组:
 $readinglist = $post_meta_cache[256]['正在阅读'];
别忘了$readinglist 是一个数组,而不是单个数值。
WordPress 2.1中,$post_meta_cache不再使用。请通过下面的函数来获取元数值

PostMeta函数

内部函数

这些函数仅用于WordPress主循环(loop)之内,所有这些函数返回的都是数组。

get_post_custom()
获取当前日志的所有key/value数据。
get_post_custom_keys()
获取当前日志的所有key名称的列表。
get_post_custom_values($key)
获取当前日志上某特定key的数值列表。
get_post_meta($post_id, $key, $single = false)
在WP 1.5和更高版本中,此函数返回元信息,而不会产生缓存方面的问题。该函数需要日志id,key,并且如果$single设定为TRUE,则仅返回第一个结果(并非为一个数组)为PHP之用。

这将输出结果元数值(注意加入了"echo"):
<?php $key="mykey"; echo get_post_meta($post->ID, $key, true); ?>

模板函数

值写此文时,可用的模板函数仅有:

the_meta()
echo一个未经排序的列表,其中含有当前日志的元数据,并具有针对UL和LI的类别,分别为post-meta 和 post-meta-key

我们希望诸位开发者的脑瓜里能时不时冒出点新点子,让日志元数据的使用以插件的形式传达给用户。the_meta() 模板函数就是这么一个榜样。

现在你只能添加和删除文章。而修改已有文章的功能将在以后推出。