前言
在 Typecho 很多模板都要通过设置自定义字段来实现文章缩略图或者其他功能,但是我们在二次开发或者开发插件时,并没有一个接口来实现获取自定义字段,所以便有了我今天的想法。
代码
public function getCustom($cid, $key){
$db = Typecho_Db::get();
$rows = $db->fetchAll($db->select('table.fields.str_value')->from('table.fields')
->where('table.fields.cid = ?', $cid)
->where('table.fields.name = ?', $key)
);
// 如果有多个值则存入数组
foreach ($rows as $row) {
$img = $row['str_value'];
if (!empty($img)) {
$values[] = $img;
}
}
return $values;
}
使用
使用时只要使用 $this->getCustom(mix $cid, mix $key) 就可以了,两个参数分别是文章 cid 和自定义字段名,函数会把自定义内容返回成数组。
_____________________________________________________________________
今天无意间逛到了《Typecho教程-获取模板自定义字段值》这个博客的这篇文章,虽然觉得需求挺奇怪的,不过还是分享个更佳简洁的方法吧,直接用typecho现成的功能直接调用。
函数
function getCustom($cid, $key){
$f=Typecho_Widget::widget('Widget_Archive@'.$cid,'pageSize=1&type=post', 'cid='.$cid);
return $f->fields->$key;
}
调用
echo getCustom('文章cid', '字段名');
相比他十多行代码简洁了不少,两三行搞定!!!其中Typecho_Widget::widget('Widget_Archive@'.$cid,'pageSize=1&type=post', 'cid='.$cid);这个玩意是真的方便,我记得19年就分享过,但是好像没有几个人认真看过 ̄□ ̄||!
_________________________________
如果是只用一个字段,你这个查询太多,直接查数据库不好吗
$db->fetchObject($archive->db->select()->from('table.fields')->where('cid = ?', $archive->cid)->where('table.fields.name = ?', $field))->str_value;
字段多重复调用你的不增加查库次数