WordPress:Using Custom Fields

来自站长百科
跳转至: 导航、​ 搜索

WordPress能够使文章作者给文章配置自定义区。这个任意的额外信息,称之为meta-data。这个meta-data可以包含以下的信息:

  • 情绪: 开心
  • 当前阅读: 灰姑娘
  • 聆听: 钟的摇摆
  • 天气: 闷热潮湿

拥有了一些额外的编码后,有可能归档更多的更加复杂的活动,例如使用metadata来为一篇文章储存一个有效期。

Meta-data是由关键词/值来处理的。关键词是meta-data元素的名称。是每篇单独的与这个信息相关的文章上的meta-data列表的上显示的信息,

Keys可以在每篇文章中多次使用。例如,如果你正在阅读两本不同的书(可能工作时,读一本技术方面的书,在家的时候,读一本小说),你可以创建一个"阅读"关键词并且在同一篇文章中两次都使用这个关键词,为每本书都使用一次。

出现在你的文章中的信息可能是什么样的,下面是一个例子;

当前阅读: Calvin 和 Hobbes

当日心情: 高兴愉快

用法[ ]

根据上述的例子,让我们来实施这个。我们会添加两个自定义区,一个称作"当前阅读" 另一个称作"当日的心情"。以下的指示说明会指导你怎样使用自定义区来将这个信息添加到一篇文章中。

  1. 你写了文章后,下拉到标题为自定义区的区域。
  2. 要创建一个新的称之为"当前阅读"的自定义区,在标题为关键词的文本输入区输入文本"当前阅读"(没有引号)。
  3. 新创建的关键词现在应该有一个,在这个例子中,是当前阅读的书名,"Calvin 和Hobbes"。在 区输入"Calvin and Hobbes",仍然没有引号。
  4. 点击添加自定义区按钮来将这篇文章的自定义信息保存下来。

要添加你的"当日的心情",重复这个过程,并且添加"当日的心情"到关键词,同时在文本框中添加你的心情的描述,并且点击保存来保存文章中的这个信息。

在你的下一篇文章中,你可以给你的meta-data添加一本新书和心情。在自定义区部分,关键词现在显示为一个下拉列表,这个列表上有先前输入的自定义范围。选择"当前阅读"然后输入你在中阅读的新书。点击添加自定义范围然后重复这个过程来添加"当日的心情"。

一次只要创建一个新的"关键词",创建好了之后,如果你想的话,你可以为每篇文章的关键词分配一个值。你可以为一篇文章的一个关键词分配几个。对于那些一次阅读几本书的人们,这个功能迟早会有用的。

显示自定义范围[ ]

给文章添加了一个自定义范围之后,就是向世界显示你的书本和心情的时候了。要为每篇文章显示自定义范围,使用the_meta()模板标签。标签必须放入The Loop中才可以运行。许多人将the_meta()模板标签添加在他们的文章的最后部分,或者添加在他们的文章 Meta Data部分。下面是使用标签的一个基本的例子:

<?php the_meta(); ?>

在源代码中,这个可能看起来像:

<ul class='post-meta'>
<li><span class='post-meta-key'>Curently Reading:</span> Calvin and Hobbes</li>
<li><span class='post-meta-key'>Today's Mood:</span> Jolly and Happy</li>
</ul>


模板标签自动地将这个的meta-data放到一个CSS样式中,称为post-meta关键词是在一个span中,称为post-meta-key,这样你可以在你的样式表中将它设计。所有的这些内容都在一个无序的列表中得到了显示。


要自定义post-meta列表的外观,就要改变你的样式表的特征。例如,,让我们给上面的例子添加一些样式。样式表元素看起来像:

.post-meta {font-variant: small-caps; color: maroon; }
.post-meta-key {color: green; font-weight: bold; font-size: 110%;  }
  • 当前阅读: Calvin 和 Hobbes
  • 当日心情: 开心愉快

官方 WordPress 插件目录中有许多WordPress插件,给显示meta标签增添了一些好的功能。搜索Google上的自定义范围插件会帮助你找到更多的插件。

自定义区的高级技术[ ]

下面是更多的关于得到并且自定义meta-data和自定义区的高级技术。

得到自定义区[ ]

使用get_post_meta()函数,能够得到meta值:

get_post_meta($post_id, $key, $single);

  • $post_id是mata值想指的文章的ID。使用$post->ID来得到文章的ID。
  • $key是一个字符串,包含了你想要的meta 值的名称。
  • $single可以是true 或者false。如果设置为true,函数会返回一个单一的结果,作为一个字符串。如果设置为false,或者没有设置,那么函数会返回一个自定义范围的数组

执行详细信息[ ]

PostMeta信息储存在一个新的表格中,$wpdb->postmeta。这个表格有四个区:

meta_id: 每篇文章的一个唯一的id
post_id: 这个metadata文章的ID
meta_key: '关键词'的名称
meta_value: 与关键词相关的值


这个表格中的值被放进了一个称为$post_meta_cache的结构多维数组,在$posts数组被引进wp-blog-header.php之后。这个变数只包括那些寻求当前创建的网页的文章的列表的值。数组的结果可能看起来像:

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

因此,如果你想要从文章号256中提取"reading"值,你使用这个PHP编码:


// 为我所阅读的内容找到一组值:

 $readinglist = $post_meta_cache[256]['reading'];

:不要忘了$readinglist会是一个数组,而不是一个单一的值。

:从WordPress2.1起,$post_meta_cache上不再有meta值。从下面提到的函数中得到meta值

PostMeta 函数[ ]

内部函数[ ]

这些函数将在The Loop内部使用,而且这些函数都返回数组。


get_post_custom()
得到当前文章的所有的关键词/值数据。
get_post_custom_keys()
得到当前文章的所有关键词名称的列表。
get_post_custom_values($key)
得到当前文章的一个特别的关键词的值的列表。
get_post_meta($post_id, $key, $single = false)
在WP1.5以及更高的版本中,这个函数返回了meta信息,但是不会产生高速缓存问题。函数需要文章id,关键词,如果$single设置为真的,它只会返回PHP使用的第一个结果(不是作为一个数组)。
这个会产出作为结果的meta值 (注意添加的"echo"):

<?php $key="mykey"; echo get_post_meta($post->ID, $key, true); ?>

模板函数[ ]

写这个的时候,只有一个模板函数。

the_meta()
输出一个无序的列表,这个列表包含有当前的文章的meta-data,有一类是关于UL的post-meta和LI的post-meta-key


我们期望独立的开发者能够提出许多插件形式的文章meta-data的有趣的用法。the_meta()模板函数只是一个特别的基本的例子。

这时,你只能够添加和删除文章。以后会给你更改当前文章的权限。