Categories
php

WordPress的自定义域

wordpress安装了一些插件之后,在文章的编辑页经常能看到新增的”自定义域“,比如说前一阵装上的tag插件,或者在另外一个系统上安装的postviews插件.

以postviews为例,这个插件能统计每篇blog的人气,它会给每篇blog新增字段:views,为了显示人气,需要在模板中插入代码:

<?php 
echo intval(post_custom('views'));
?>

这样有可能在一个loop里面多次调用post_custom函数,这时候对它的性能不免有些怀疑,担心post_custom函数会多次读取数据库,于是读了一下相关的代码:


function get_post_custom( $post_id = 0 ) {
	global $id, $post_meta_cache, $wpdb;

	if ( ! $post_id )
		$post_id = $id;

	if ( isset($post_meta_cache[$post_id]) )
		return $post_meta_cache[$post_id];

	if ( $meta_list = $wpdb->get_results("SELECT post_id, meta_key, meta_value FROM $wpdb->postmeta	WHERE post_id = '$post_id' ORDER BY post_id, meta_key", ARRAY_A) ) {
		//读取数据库...........
	}
}

可以看到,wordpress也已经考虑到这个问题,如果已经读取过自定义域,会以缓存的形式$post_meta_cache直接返回,不再折腾可怜的数据库了.

One reply on “WordPress的自定义域”

Leave a Reply

Your email address will not be published.