WordPress中编写自定义存储字段的相关PHP函数解析


Posted in PHP onDecember 25, 2015

WordPress 的自定义字段就是文章的 meta 信息(元信息),利用这个功能,可以扩展文章的功能,是学习 WordPress 插件开发和主题深度开发的必备知识,方便给文章储存一些额外的自定义内容。

自定义字段不光给插件开发者使用,WordPress 的特色图像、自定义页面模板等功能的信息都储存在自定义字段的表单里边。

在文章编辑器界面的 “自定义栏目” 板块可以管理除了名字开头是 “_” 的字段(没有 “自定义栏目” 板块请在右上角的 “显示选项” 开启),所以很多 WordPress 自己使用的自定义字段无法在此管理。
存储原理

自定义字段非常灵活,首先来说一下它的储存原理和为什么这么灵活。数据库中,储存文章的 wp_posts 表单,只有默认的 20 个项目,用于储存必须的文章信息。

WordPress中编写自定义存储字段的相关PHP函数解析

而存储自定义字段的 wp_postmeta 表,却只有四个项目,分别是 meta_id(自定义字段的 ID)、post_id(自定义字段属于的文章的 ID)、meta_key(自定义字段的名字)和 meta_value(自定义字段的值),一般我们只需要注意 meta_key 和 meta_value 两个项目即可。

正是因为这样,每篇文章都可以有相同名字但不同值的自定义字段,而且可以有无限个自定义字段,任何的插件和主题都可以利用自定义字段对文章信息进行扩展。

一篇文章的自定义字段的名字是可以重复的。

添加字段

自定义字段可以在文章编辑页面操作,但本文主要写关于开发的事情。

WordPress中编写自定义存储字段的相关PHP函数解析

添加自定义字段,可以使用 add_post_meta() 函数:

add_post_meta( $post_id, $meta_key, $meta_value, $unique );

参数:

$post_id

(整数)(必须)添加自定义字段的文章的 ID.

默认值:None

$meta_key

(字符串)(必须)自定义字段的名称。

默认值:None

$meta_value

(混合)(必须)自定义字段的值。

默认值:None

$unique

(布尔)(可选)如果已经有相同名字的字段,是否重复添加。True 允许;False 不允许。

默认值:False

更新字段

要更新一个字段的值,可以使用 update_post_meta() 函数:

update_post_meta( $post_id, $meta_key, $meta_value, $prev_value );

参数:

$post_id

(整数)(必须)更新自定义字段的文章的 ID.

默认值:None

$meta_key

(字符串)(必须)更新的自定义字段的名称。

默认值:None

$meta_value

(混合)(必须)更新的自定义字段的值。

默认值:None

$prev_value

(混合)(可选)此参数只有在一篇文章有多个相同名称的自定义字段时才有用。如果留空,则更新所有同名的字段,否则则更新和此参数值相同的值的字段。

默认值:空字符串

获取字段

获取字段可以使用 get_post_meta() 函数:

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

参数:

$post_id

(整数)(必须)要获取字段的文章 ID,如果在循环中,可以使用 get_the_ID() 来设置。

默认值:None

$key

(字符串)(可选)要获取的字段的名称。

默认值:None

$single

(布尔)(可选)如果为 True 则返回一个字符串;如果为 False 则返回数组,且相同键值的自定义字段的值会按照添加顺序组合成一个序列数组。

默认值:False

例子

下边是一个浏览统计的简单例子:

function Bing_statistics_visitors( $cache = false ){
  if( !is_singular() ) return;
  global $post;
  $id = $post->ID;
  if( get_post( $id )->post_status != 'publish' ) return;
  $post_views = (int) get_post_meta( $id, 'views', true );
  update_post_meta( $id, 'views', ( $post_views + 1 ) ) || add_post_meta( $id, 'views', 1, true );
}
add_action( 'wp_head', 'Bing_statistics_visitors' );
获取计数:
function Bing_get_views(){
  global $post;
  $views = number_format( (int) get_post_meta( $post->ID, 'views', true ) );
  return $views;
}

不可见的自定义字段
虽然在数据库里存在很多 WordPress 自己创建的自定义字段,但是在文章编辑器的 “自定义栏目” 里却并没有显示(没有 “自定义栏目” 板块请在右上角的 “显示选项” 开启),比如特色图像、自定义页面模板和评论是否开启等等。

如果仔细观察,会发现这些自定义字段的名字都是以下划线 “_” 开头的,所以说,以下划线 “_” 开头的自定义字段并不会显示给用户,the_meta() 函数也不会输出,对用户来说是隐藏的。

WordPress中编写自定义存储字段的相关PHP函数解析

利用这个特性,我们可以把不想让用户随便修改的字段、会让用户感到困惑的字段,比如已经提供设置界面的设置选项、缓存数据等等,以免出现错误。

下边是一个小例子:

add_post_meta( get_the_ID(), '_time_diff', time() );

另外,如果自定义字段储存的内容是数组即使名字前边不是下划线 “_” 也不会显示。

PHP 相关文章推荐
使用zend studio for eclipse不能激活代码提示功能的解决办法
Oct 11 PHP
phpize的深入理解
Jun 03 PHP
如何使用php判断服务器是否是HTTPS连接
Jul 05 PHP
如何取得中文字符串中出现次数最多的子串
Aug 08 PHP
ThinkPHP的MVC开发机制实例解析
Aug 23 PHP
Laravel 4 初级教程之安装及入门
Oct 30 PHP
php实现将任意进制数转换成10进制的方法
Apr 17 PHP
WAMP环境中扩展oracle函数库(oci)
Jun 26 PHP
PHP模拟asp.net的StringBuilder类实现方法
Aug 08 PHP
php实现的redis缓存类定义与使用方法示例
Aug 09 PHP
PHP bin2hex()函数基础实例讲解
Feb 11 PHP
详解使用php-cs-fixer格式化代码
Sep 16 PHP
PHP加密解密实例分析
Dec 25 #PHP
PHP时间类完整实例(非常实用)
Dec 25 #PHP
PHP图形操作之Jpgraph学习笔记
Dec 25 #PHP
php实现scws中文分词搜索的方法
Dec 25 #PHP
php自定义分页类完整实例
Dec 25 #PHP
php导出生成word的方法
Dec 25 #PHP
大家都应该掌握的PHP关联数组使用技巧
Dec 25 #PHP
You might like
虹吸式咖啡探讨–研磨
2021/03/03 冲泡冲煮
coreseek 搜索英文的问题详解
2013/06/08 PHP
ThinkPHP框架里隐藏index.php
2016/04/12 PHP
php 的反射详解及示例代码
2016/08/25 PHP
JavaScript Event学习第七章 事件属性
2010/02/07 Javascript
在VS2008中使用jQuery智能感应的方法
2010/12/30 Javascript
JavaScript对象学习经验整理
2013/10/12 Javascript
javascript面向对象之共享成员属性与方法及prototype关键字用法
2015/01/13 Javascript
jQuery使用$.ajax提交表单完整实例
2015/12/11 Javascript
JavaScript判断用户名和密码不能为空的实现代码
2016/05/16 Javascript
Vuejs第十三篇之组件——杂项
2016/09/09 Javascript
微信小程序进行微信支付的步骤昂述
2016/12/01 Javascript
微信小程序 Windows2008 R2服务器配置TLS1.2方法
2016/12/05 Javascript
详解webpack 配合babel 将es6转成es5 超简单实例
2017/05/02 Javascript
基于Vue的商品主图放大镜方案详解
2019/09/19 Javascript
微信小程序事件流原理解析
2019/11/27 Javascript
Python利用pyHook实现监听用户鼠标与键盘事件
2014/08/21 Python
python中datetime模块中strftime/strptime函数的使用
2018/07/03 Python
Python3对称加密算法AES、DES3实例详解
2018/12/06 Python
PyTorch的深度学习入门教程之构建神经网络
2019/06/27 Python
python全栈知识点总结
2019/07/01 Python
Python: 传递列表副本方式
2019/12/19 Python
linux环境下安装python虚拟环境及注意事项
2020/01/07 Python
在pycharm中关掉ipython console/PyDev操作
2020/06/09 Python
Django路由层URLconf作用及原理解析
2020/09/24 Python
python常量折叠基础知识点讲解
2021/02/28 Python
美国餐厅用品和厨房设备批发网站:KaTom Restaurant Supply
2018/01/27 全球购物
为娇小女性量身打造:Petite Studio
2018/11/01 全球购物
英国标志性生活方式品牌:Skinnydip London
2019/12/15 全球购物
机械专业毕业生自荐信
2013/11/02 职场文书
什么是岗位职责
2013/11/12 职场文书
绩效专员岗位职责
2013/12/02 职场文书
实习生自我评价
2014/01/18 职场文书
专科生就业求职信
2014/06/22 职场文书
2019经典广告词集锦!
2019/07/02 职场文书
JS前端使用canvas实现物体的点选示例
2022/08/05 Javascript