填写您的邮件地址,订阅我们的精彩内容:

wordpress中postmeta的奇思妙用

570

在wordpress中有一个非常有意思的功能,即“自定义栏目”。这个小家伙可以帮助我们实现对文章功能的扩展,用get_post_meta,update_post_meta两个简单的函数,让博客充满奇迹功能。利用他们,我们可以增加浏览次数、喜欢人数、收藏、浏览过、分享到等等各种和文章相关的功能。本文不再以实现这些功能为目标,返回来,本文以发掘postmeta的奇妙之处为目的。

1、扩展的文章字段

在数据库中,存放文章信息的表_posts的字段数是一定的,虽然我们可以通过对数据库的操作增加字段,但我们很难忽略这样的问题:某一篇文章中,我们要做一个特殊的记号,而其他文章根本不用。wordpress拥有另外的表_postmate,用以存放这种额外的属性。例如,我们希望了解这篇文章被分享到新浪微博的次数,我们在postmate这张表中增加了一条记录,保存了这篇文章的ID,作为代替“分享到新浪微博的次数”的记号‘shareToSinaWeibo’,并保存了分享的次数值。我们通过get_post_meta(ID,’shareToSinaWeibo’)即可获取该数值,通过update_post_meta(ID,’shareToSinaWeibo’,’新的数值’)即可更新该值。这就像为ID文章增加了一个字段,而且这个字段在其他文章中照常可以使用。

2、让博客功能复合化

我曾帮别人做一个主题,以在自己的博客出售自行车及相关器材。通过增加postmeta来实现商品属性的扩展,通过已有的知识让博主可以直接在后台填写商品的品牌、价格、颜色、尺寸等信息,并可以通过excel来管理库存。我还为一家社团制作了讲座相关的信息功能,这一功能也是通过postmeta来实现的。这里值得分享的一点是,我们将meta_key的开头加上短下划线,例如”_price”时,这种postmeta不会出现在后台自定义栏目下拉中,但是我们仍然可以更新和调用它。

3、根据post_meta来调用特定的文章

这一功能对于那些熟练使用query_posts函数的开发者来说非常有用,因为我们在这一点上,让我们的博客犹如一架高档的战斗机而不同于其他一般的博客。在这一点上,我们对文章的调用主要有两种方式:一、调用mate_key的值与meta_value相关的文章(这个相关可以是相等、大于小于、相似、包含、不等、不包含等各种关系);二、根据meta_key的meta_value进行排序,如根据浏览量对文章进行排序。

这里需要深入研究分析的是meta_compare这样一个参数。“元的比较”不是很好理解,我们需要阅读wordpress开发文档中WP_Query的部分,了解有关于此的更多的信息。

Custom Field Parameters
Show posts associated with a certain custom field.
meta_key (string) – Custom field key.
meta_value (string) – Custom field value.
meta_value_num (number) – Custom field value.
meta_compare (string) – Operator to test the ‘meta_value’. Possible values are ‘!=’, ‘>’, ‘>=’, ‘<‘, or ‘<=’. Default value is ‘=’.
meta_query (array) – Custom field parameters (available with Version 3.1).
key (string) – Custom field key.
value (string|array) – Custom field value (Note: Array support is limited to a compare value of ‘IN’, ‘NOT IN’, ‘BETWEEN’, or ‘NOT BETWEEN’)
compare (string) – Operator to test. Possible values are ‘=’, ‘!=’, ‘>’, ‘>=’, ‘<‘, ‘<=’, ‘LIKE’, ‘NOT LIKE’, ‘IN’, ‘NOT IN’, ‘BETWEEN’, ‘NOT BETWEEN’. Default value is ‘=’.
type (string) – Custom field type. Possible values are ‘NUMERIC’, ‘BINARY’, ‘CHAR’, ‘DATE’, ‘DATETIME’, ‘DECIMAL’, ‘SIGNED’, ‘TIME’, ‘UNSIGNED’. Default value is ‘CHAR’.

meta_compare可以取“!=、LIKE、IN、BETWEEN”等,真是不可思议,这和我们直接写SQL进行数据库的操作已经非常相近了,这在我以前使用php开发框架时经常遇到。

通过postmeta我们应该还能做其他的事情,纵向与横向相联系。我们还会发现wordpress的数据表中还有usermeta、commentmeta两张表,一个是增加用户信息,一个是增加留言信息,其作用也和postmeta相似,真可谓不得不叹息。利用他们,wordpress完成可以开发出更多的令人百思不得其解的功能。

下面我简单说几句