同乐儿

  1. 首页
  2. typecho开发
Typecho文章页添加自定义字段的方法
发布 | 3个月前 (12-09) | 阅读数:497 | 评论数:0 | 来源:同乐儿

wordpress升级到5.0写作起来还真有点不适应界面,不过看起来很新颖,那就用5.0记录一下Typecho文章页添加自定义字段的方法体验一下,结果5.0太不适应了,就还原了下旧版本。如果想还原旧版本,可以手动下载旧版本的wordpress程序删掉wp-content/和wp-config.php覆盖到网站目录即可,或者安装WP Downgrade插件自动完成还原旧版本工作。
方法一:使用新建表字段方式添加1、首先在contents表中新建一个test字段,类型可为字符串。2、后台模板文件write-post.php 表单中插入如下代码:
  1. <p><input type=“text” name=“test” value=“<?php $post->test_url(); ?>”/></p>
3、在 Widget\Contents\Post\Edit.php 这里的 writePost 函数里需要接收新字段参数:
  1. public function writePost(){
  2.         $contents = $this->request->from(‘password’, ‘allowComment’,
  3.             ‘allowPing’, ‘allowFeed’, ‘slug’, ‘tags’, ‘text’, ‘visibility’,’test_url’);
4-1、Widget\Abstract\Contents.php 这里的 insert 函数添加新参数:
  1. /**
  2.      * 插入内容
  3.      * @access public
  4.      * @param array $content 内容数组
  5.      * @return integer
  6.      */
  7.     public function insert(array $content){
  8.         /** 构建插入结构 */
  9.         $insertStruct = array(
  10.             ‘title’         =>  emptyempty($content[‘title’]) ? NULL : htmlspecialchars($content[‘title’]),
  11.             ‘created’       =>  emptyempty($content[‘created’]) ? $this->options->gmtTime : $content[‘created’],
  12.             ‘modified’      =>  $this->options->gmtTime,
  13.             ‘text’          =>  emptyempty($content[‘text’]) ? NULL : $content[‘text’],
  14.             ‘order’         =>  emptyempty($content[‘order’]) ? 0 : intval($content[‘order’]),
  15.             ‘authorId’      =>  isset($content[‘authorId’]) ? $content[‘authorId’] : $this->user->uid,
  16.             ‘template’      =>  emptyempty($content[‘template’]) ? NULL : $content[‘template’],
  17.             ‘type’          =>  emptyempty($content[‘type’]) ? ‘post’ : $content[‘type’],
  18.             ‘status’        =>  emptyempty($content[‘status’]) ? ‘publish’ : $content[‘status’],
  19.             ‘password’      =>  emptyempty($content[‘password’]) ? NULL : $content[‘password’],
  20.             ‘commentsNum’   =>  emptyempty($content[‘commentsNum’]) ? 0 : $content[‘commentsNum’],
  21.             ‘allowComment’  =>  !emptyempty($content[‘allowComment’]) && 1 == $content[‘allowComment’] ? 1 : 0,
  22.             ‘allowPing’     =>  !emptyempty($content[‘allowPing’]) && 1 == $content[‘allowPing’] ? 1 : 0,
  23.             ‘allowFeed’     =>  !emptyempty($content[‘allowFeed’]) && 1 == $content[‘allowFeed’] ? 1 : 0,
  24.             ‘parent’        =>  emptyempty($content[‘parent’]) ? 0 : intval($content[‘parent’]),
  25.             ‘test_url’         =>  emptyempty($content[‘test_url’]) ? NULL : $content[‘test_url’]
  26.         );
4-2、这里的update函数里构建更新结构加入新字段:
  1. /**
  2.      * 更新内容
  3.      * @access public
  4.      * @param array $content 内容数组
  5.      * @param Typecho_Db_Query $condition 更新条件
  6.      * @return integer
  7.      */
  8.     public function update(array $content, Typecho_Db_Query $condition)
  9.     {
  10.         /** 首先验证写入权限 */
  11.         if (!$this->isWriteable(clone $condition)) {
  12.             return false;
  13.         }
  14.         /** 构建更新结构 */
  15.         $preUpdateStruct = array(
  16.             ‘title’         =>  emptyempty($content[‘title’]) ? NULL : htmlspecialchars($content[‘title’]),
  17.             ‘order’         =>  emptyempty($content[‘order’]) ? 0 : intval($content[‘order’]),
  18.             ‘text’          =>  emptyempty($content[‘text’]) ? NULL : $content[‘text’],
  19.             ‘template’      =>  emptyempty($content[‘template’]) ? NULL : $content[‘template’],
  20.             ‘type’          =>  emptyempty($content[‘type’]) ? ‘post’ : $content[‘type’],
  21.             ‘status’        =>  emptyempty($content[‘status’]) ? ‘publish’ : $content[‘status’],
  22.             ‘password’      =>  emptyempty($content[‘password’]) ? NULL : $content[‘password’],
  23.             ‘allowComment’  =>  !emptyempty($content[‘allowComment’]) && 1 == $content[‘allowComment’] ? 1 : 0,
  24.             ‘allowPing’     =>  !emptyempty($content[‘allowPing’]) && 1 == $content[‘allowPing’] ? 1 : 0,
  25.             ‘allowFeed’     =>  !emptyempty($content[‘allowFeed’]) && 1 == $content[‘allowFeed’] ? 1 : 0,
  26.             ‘parent’        =>  emptyempty($content[‘parent’]) ? 0 : intval($content[‘parent’]),
  27.             ‘test_url’         =>  emptyempty($content[‘test_url’]) ? NULL : $content[‘test_url’],
  28.         );
4-3、select函数里添加查询新字段:
  1. /**
  2.      * 获取查询对象
  3.      * @access public
  4.      * @return Typecho_Db_Query
  5.      */
  6.     public function select(){
  7.         return $this->db->select(‘table.contents.cid’, ‘table.contents.title’, ‘table.contents.slug’, ‘table.contents.created’, ‘table.contents.authorId’,
  8.         ‘table.contents.modified’, ‘table.contents.type’, ‘table.contents.status’, ‘table.contents.text’, ‘table.contents.commentsNum’, ‘table.contents.order’,
  9.         ‘table.contents.template’, ‘table.contents.password’, ‘table.contents.allowComment’, ‘table.contents.allowPing’, ‘table.contents.allowFeed’,
  10.         ‘table.contents.parent’,’table.contents.test_url’)->from(‘table.contents’);
  11.     }

/tmp/phpvIoFbj

方法二:在主题设置中添加代码

只需在主题目录下function.php中添加如下代码即可完成,相对比较简单。
  1. function themeFields($layout) {
  2. $temp = new Typecho_Widget_Helper_Form_Element_Text(‘temp’, NULL, NULL, _t(‘测试自定义字段’), _t(‘测试自定义字段描述’));
  3. $layout->addItem($temp);
  4. }
方法三:使用js实现在开发typecho插件时,可以在激活方法中添加
  1. Typecho_Plugin::factory(‘admin/write-post.php’)->option = array(‘Temp_Plugin’, ‘addField’);
之后添加如下方法即可,具体代码请自行修改。
  1. public static function addField(){
  2. if($(‘[name=“fieldNames[]”]’).last().val()!=“”){
  3.                     var html = ‘<tr><td><input type=“text” name=“fieldNames[]” placeholder=“<?php _e(‘字段名称’); ?>” class=“text-s w-100”></td>’
  4.                             + ‘<td><select name=“fieldTypes[]” id=“”>’
  5.                             + ‘<option value=“str”><?php _e(‘字符’); ?></option>’
  6.                             + ‘<option value=“int”><?php _e(‘整数’); ?></option>’
  7.                             + ‘<option value=“float”><?php _e(‘小数’); ?></option>’
  8.                             + ‘</select></td>’
  9.                             + ‘<td><textarea name=“fieldValues[]” placeholder=“<?php _e(‘字段值’); ?>” class=“text-s w-100” rows=“2”></textarea></td>’
  10.                             + ‘<td><button type=“button” class=“btn btn-xs”><?php _e(‘删除’); ?></button></td></tr>’,
  11.                         el = $(html).hide().appendTo(‘#custom-field table tbody’).fadeIn();
  12.                     attachDeleteEvent(el);
  13.                 }
  14.                 $(‘[name=“fieldTypes[]”]’).last().find(“option[value=’str’]”).attr(“selected”,true).siblings().remove();
  15.                 $(‘[name=“fieldNames[]”]’).last().attr(‘value’, ‘thumbUrl’).attr(‘readonly’,’readonly’);
  16.                 $(‘[name=“fieldValues[]”]’).last().attr(‘placeholder’,’文章缩略图,推荐尺寸:700px*220px’);
  17.                 var html = ‘<tr><td><input type=“text” name=“fieldNames[]” placeholder=“<?php _e(‘字段名称’); ?>” class=“text-s w-100”></td>’
  18.                         + ‘<td><select name=“fieldTypes[]” id=“”>’
  19.                         + ‘<option value=“str”><?php _e(‘字符’); ?></option>’
  20.                         + ‘<option value=“int”><?php _e(‘整数’); ?></option>’
  21.                         + ‘<option value=“float”><?php _e(‘小数’); ?></option>’
  22.                         + ‘</select></td>’
  23.                         + ‘<td><textarea name=“fieldValues[]” placeholder=“<?php _e(‘字段值’); ?>” class=“text-s w-100” rows=“2”></textarea></td>’
  24.                         + ‘<td><button type=“button” class=“btn btn-xs”><?php _e(‘删除’); ?></button></td></tr>’,
  25.                     el = $(html).hide().appendTo(‘#custom-field table tbody’).fadeIn();
  26.                 attachDeleteEvent(el);
  27. }


如果觉得该作者的文章对你有帮助,请随意打赏给他。您的支持将鼓励作者继续创作!
打赏
X
打赏本文作者方式

微信扫一扫可留言


继续浏览有关 Typecho 的文章

分享至:


发表我的评论
取消评论

表情
  • 119 评论
  • 152 粉丝
  • 134 文章
  • 最新评论
    二呆说:在公众号回复这个关键字就有了~
    222说:1803验证
    二呆说:看见岛有了点信号,我用的时候就是看对应网...
    123123123说:我试过了,没改成功,不着急用,看了qur...
    二呆说:6.0应该也行,时间太长忘记了,好像6....

    • 同乐儿
    • 北京 朝阳区
    • 2018年8月1日
    • 如有仿站或其他事宜联系微信:Diamond0419
    • 查看更多 >
    随机热门
    标签
    wordpress (81) wordpress优化 (26) 原创 (26) wordpress主题 (24) wordpress插件 (21) wordpress教程 (18) wordpress seo (17) Typecho (17) Typecho插件 (14) 博客主题 (8) emlog插件 (6) wordpress维护 (6) emlog (6) CMS主题 (5) 企业主题 (4) DNSPod for emlog (3) 淘宝客主题 (3) 修订版本 (3) 自动保存 (3) 移动适配 (3)