一、核心函数 (Functions) 参考
子比主题封装了大量实用函数,您可以直接调用以获取数据或执行操作。
1.1 主题核心函数
| 函数名 | 说明 | 示例 |
|---|---|---|
_pz($option_name, $default) |
获取主题选项值(快捷函数) | $logo = _pz('logo_ico'); |
zib_get_option($option_name, $default) |
获取主题选项值(完整函数) | $site_name = zib_get_option('name'); |
zib_send_json_success($data) |
发送成功的AJAX JSON响应 | zib_send_json_success(['msg' => '操作成功']); |
zib_send_json_error($message) |
发送错误的AJAX JSON响应 | zib_send_json_error('参数错误'); |
1.2 支付相关函数
| 函数名 | 说明 |
|---|---|
zibpay_initiate_pay($order_data) |
发起支付,返回支付参数 |
zibpay_get_order_status($order_id) |
获取指定订单的状态 |
zibpay_get_user_balance($user_id) |
获取用户余额 |
zibpay_get_user_points($user_id) |
获取用户积分 |
zibpay_get_user_vip_level($user_id) |
获取用户VIP等级 |
1.3 用户与内容函数
| 函数名 | 说明 |
|---|---|
zib_get_user_center_url($user_id) |
获取用户中心链接 |
zib_get_user_avatar($user_id, $size) |
获取用户头像 |
zib_get_user_cover_img($user_id) |
获取用户封面图片 |
zib_get_post_like_count($post_id) |
获取文章点赞数 |
zibpay_is_posts_paid($post_id) |
判断当前用户是否已付费购买文章 |
函数调用示例:
// 获取当前用户信息
$user_id = get_current_user_id();
if($user_id) {
$user_name = zib_get_user_name($user_id);
$user_avatar = zib_get_user_avatar($user_id, 50);
$vip_level = zibpay_get_user_vip_level($user_id);
echo "欢迎,{$user_name}(VIP{$vip_level})";
}
// 检查文章付费状态并显示相应内容
if (zibpay_is_posts_paid(get_the_ID())) {
the_content(); // 显示完整内容
} else {
echo zibpay_get_posts_pay_button(get_the_ID()); // 显示购买按钮
}二、核心类 (Classes)
子比主题使用面向对象的方式封装了核心功能模块,以下是主要的类及其方法。
2.1 订单管理类 ZibOrder
用于处理所有支付订单的创建、查询、更新。
| 静态方法 | 说明 |
|---|---|
ZibOrder::create_db() |
创建订单数据表(安装时调用) |
ZibOrder::get_row($where) |
获取单条订单记录 |
ZibOrder::update_order($order_id, $data) |
更新订单信息 |
ZibOrder::payment_order($order_id, $payment_data) |
处理订单支付成功逻辑 |
ZibOrder::close_order($order_id) |
关闭订单 |
使用示例:
// 查询订单
$order = ZibOrder::get_row(['order_num' => '20231001123456']);
if($order) {
echo "订单状态:" . $order->status;
}
// 更新订单
ZibOrder::update_order($order_id, [
'status' => 'completed',
'pay_time' => current_time('mysql')
]);2.2 消息管理类 ZibMsg
用于处理用户间的消息通知。
| 静态方法 | 说明 |
|---|---|
ZibMsg::add($msg_data) |
添加一条新消息 |
ZibMsg::get_row($where) |
获取单条消息 |
ZibMsg::get_count($user_id, $read = false) |
获取用户未读/全部消息数 |
使用示例:
// 给用户发送系统通知 ZibMsg::add([ 'send_user' => 0, // 0 代表系统 'receive_user' => $user_id, 'type' => 'system', 'title' => '积分到账通知', 'content' => '您收到了100积分奖励。', ]);
2.3 数据库操作类 ZibDb
提供了流畅的查询构造器,用于安全地进行数据库操作。
| 方法 | 说明 | 示例 |
|---|---|---|
::name($table_name) |
指定表名 | ZibDb::name('order') |
::where($conditions) |
添加查询条件 | ->where(['status' => 1]) |
::get() |
执行查询,返回结果集 | ->get() |
::find() |
执行查询,返回单条记录 | ->find() |
::insert($data) |
插入数据 | ->insert($order_data) |
::update($data) |
更新数据 | ->update(['status'=>2]) |
链式调用示例:
// 查询用户最近10条已支付的订单
$orders = ZibDb::name('order')
->where(['user_id' => $user_id, 'status' => 'paid'])
->orderBy('pay_time', 'DESC')
->limit(10)
->get();
// 更新卡密状态为已使用
ZibDb::name('card_password')
->where(['card' => $card_number, 'password' => $password])
->update(['status' => 'used', 'use_time' => current_time('mysql')]);三、数据库表结构
了解核心数据表结构有助于进行高级自定义查询和数据操作。
3.1 核心数据表概览
| 表名 | 主要用途 |
|---|---|
zibpay_order |
存储所有支付订单 |
zibpay_order_meta |
存储订单的扩展元数据 |
zibpay_card_password |
存储卡密信息 |
zib_message |
存储用户消息和系统通知 |
3.2 zibpay_order 订单表结构
这是最重要的表之一,主要字段如下:
| 字段名 | 类型 | 说明 |
|---|---|---|
id |
BIGINT | 自增主键,订单ID |
order_num |
VARCHAR(32) | 唯一订单号,用于业务查询 |
user_id |
BIGINT | 下单用户ID |
order_type |
VARCHAR(20) | 订单类型:vip、yuedu、shop等 |
order_price |
DECIMAL(10,2) | 订单金额 |
status |
VARCHAR(20) | 状态:pending(待支付)、paid(已支付)、closed(已关闭)等 |
create_time |
DATETIME | 订单创建时间 |
pay_time |
DATETIME | 支付成功时间 |
3.3 zib_message 消息表结构
| 字段名 | 类型 | 说明 |
|---|---|---|
id |
BIGINT | 自增主键,消息ID |
send_user |
BIGINT | 发送者用户ID,0为系统 |
receive_user |
BIGINT | 接收者用户ID |
type |
VARCHAR(20) | 消息类型:system、user、comment等 |
title |
VARCHAR(255) | 消息标题 |
content |
TEXT | 消息内容 |
status |
INT | 阅读状态:0=未读,1=已读 |
3.4 自定义查询示例
global $wpdb;
// 查询今日订单总额
$today_start = date('Y-m-d 00:00:00');
$today_revenue = $wpdb->get_var($wpdb->prepare(
"SELECT SUM(order_price) FROM {$wpdb->prefix}zibpay_order WHERE status = 'paid' AND pay_time >= %s",
$today_start
));
// 查询用户的订单统计
$user_order_stats = $wpdb->get_row($wpdb->prepare(
"SELECT
COUNT(*) as total_orders,
SUM(CASE WHEN status = 'paid' THEN order_price ELSE 0 END) as total_paid
FROM {$wpdb->prefix}zibpay_order
WHERE user_id = %d",
$user_id
));四、性能优化机制
子比主题内置了完善的缓存机制以提升性能,开发者应充分利用。
4.1 对象缓存 (Object Cache)
主题使用WordPress对象缓存API来缓存频繁查询的数据。
// 缓存读取模式
$cache_data = wp_cache_get($cache_key, 'zib_cache_group');
if (false !== $cache_data) {
return $cache_data; // 命中缓存,直接返回
}
// 未命中缓存,执行数据库查询
$data = expensive_database_query();
// 将结果写入缓存,有效期1小时
wp_cache_set($cache_key, $data, 'zib_cache_group', 3600);
return $data;主要缓存组:
post_pay_cuont- 文章付费次数user_order_data- 用户订单数据zibpay_ordermeta- 订单元数据
4.2 静态变量缓存
对于单次请求内多次调用的函数,使用静态变量缓存。
function zibpay_get_pay_mark() {
// 静态变量,只在第一次调用时查询选项
static $pay_mark = null;
if (is_null($pay_mark)) {
$pay_mark = _pz('pay_mark') ?: '¥';
}
return $pay_mark;
}五、开发注意事项
- 安全性:所有用户输入必须使用
sanitize_text_field()、intval()等函数处理,数据库查询使用prepare()语句。 - 兼容性检查:在调用主题函数前,使用
function_exists()进行检查。 - 缓存清理:当自定义代码修改了数据时,记得清理相关缓存
wp_cache_delete($key, $group)。 - 错误处理:使用主题提供的
zib_send_json_error()或zib_send_json_success()返回AJAX响应。
示例:安全的AJAX处理函数
add_action('wp_ajax_my_custom_action', 'handle_my_custom_action');
function handle_my_custom_action() {
// 1. 验证Nonce
if (!wp_verify_nonce($_POST['nonce'], 'my_action_nonce')) {
zib_send_json_error('安全验证失败');
}
// 2. 验证权限
if (!current_user_can('edit_posts')) {
zib_send_json_error('权限不足');
}
// 3. 清理输入
$post_id = intval($_POST['post_id']);
$action = sanitize_text_field($_POST['action_type']);
// 4. 执行业务逻辑...
// 5. 返回标准响应
zib_send_json_success(['message' => '操作成功', 'data' => $result]);
}(未完待续,下一部分将详细介绍API调用、自定义内容类型开发与实战示例)