子比主题开发文档
使用指南Codestar Framework主题扩展在线部署AI 功能推荐插件赞助打赏

Ajax 动作

子比主题 WordPress Ajax 动作分布、命名、权限校验、响应函数、游客入口和调试边界。

Ajax 总览

子比主题大量交互走 WordPress Ajax,入口仍然是:

wp-admin/admin-ajax.php?action=动作名

注册方式保持 WordPress 标准:

add_action('wp_ajax_user_signin', 'zib_ajax_user_signin');
add_action('wp_ajax_nopriv_user_signin', 'zib_ajax_user_signin');

命名习惯很清晰:

前缀含义
zib_ajax_*主题主流程 Ajax 回调函数
zibpay_ajax_*Zibpay 支付、订单、资产 Ajax
zib_bbs_ajax_*论坛模块 Ajax
zib_shop_ajax_*商城模块 Ajax

动作名通常不带 zib_ 前缀,例如 user_signinposts_savefollow_platesubmit_order

主题响应函数

子比在 action/ajax.php 中定义了统一响应函数:

function zib_send_json_error($data = false, $type = 'danger')
function zib_send_json_success($data = false, $type = '')

常见写法:

if (!$user_id) {
    zib_send_json_error(__('请先登录', 'zib_language'));
}

zib_send_json_success(array(
    'msg'  => __('操作成功', 'zib_language'),
    'html' => $html,
));

主题很多旧流程会直接使用这两个函数,不一定使用 wp_send_json_success()。读源码时优先按子比响应结构理解前端处理。

登录注册动作

文件:

action/sign_register.php

核心动作:

Action回调游客
user_signinzib_ajax_user_signin
user_signupzib_ajax_user_signup
user_signin_nopaszib_ajax_user_signin_nopas
signup_captchazib_ajax_signup_captcha
signin_captchazib_ajax_signin_captcha
resetpassword_captchazib_ajax_resetpassword_captcha
reset_passwordzib_ajax_reset_password

这类动作会调用:

zib_ajax_captcha_form_judgment()
zib_ajax_send_captcha()
zib_ajax_email_judgment()
zib_ajax_username_judgment()

登录成功后会触发 WordPress 原生 Hook:

do_action('wp_login', $user->user_login, $user);

注册会经过:

$errors = apply_filters('registration_errors', $errors, $sanitized_user_login, $email);

用户资料动作

文件:

action/user.php

核心动作:

Action回调用途
user_edit_dataszib_ajax_user_edit_datas保存用户资料
user_upload_avatarzib_ajax_user_upload_avatar上传头像
user_upload_coverzib_ajax_user_upload_cover上传封面
user_change_passwordzib_ajax_user_change_password修改密码
bind_email_captchazib_ajax_bind_email_captcha发送绑定邮箱验证码
user_bind_emailzib_ajax_user_bind_email绑定邮箱
bind_phone_captchazib_ajax_bind_phone_captcha发送绑定手机验证码
user_bind_phonezib_ajax_user_bind_phone绑定手机
verify_userzib_ajax_verify_user用户身份认证
user_rewards_modalzib_ajax_user_rewards_modal打赏资料弹窗

用户资料写入统一走主题封装:

zib_update_user_meta($cuid, 'custom_avatar', $image_url[0]);
zib_update_user_meta($cuid, 'cover_image', $image_url[0]);

重要 Hook:

do_action('user_save_custom_avatar', $cuid, $img_id, $image_url[0]);
do_action('zib_user_bind_email', $cuid, $captcha_val, $email);
do_action('zib_user_bind_phone', $cuid, $captcha_val, $old_phone);

投稿与文章动作

文件:

action/new_posts.php
action/media.php
action/comment.php
action/function.php

核心动作:

Action回调用途
posts_savezib_ajax_new_posts前台投稿保存
posts_draftzib_ajax_new_posts保存草稿
new_post_deletezib_ajax_new_post_delete删除投稿
user_upload_imagezib_ajax_user_upload_image上传图片
user_split_uploadzib_ajax_user_split_upload分片上传
submit_commentzib_ajax_submit_comment提交评论
get_commentzib_ajax_get_comment拉取评论
query_posts_listszib_ajax_query_posts_listsAjax 列表
views_recordzib_post_views_record浏览记录

投稿保存前后 Hook:

do_action('zib_pre_insert_post', $postarr);
do_action('new_' . ($is_new ? 'add' : 'edit') . '_posts', $new_post_obj);
do_action('new_posts_pending', $new_post_obj);

评论流程里常见 Hook:

do_action('comment_is_topping', $comment);
do_action('set_comment_cookies', $comment, wp_get_current_user());

论坛动作

文件:

inc/functions/bbs/action/

核心动作:

Action回调用途
bbs_posts_savezib_bbs_ajax_edit_posts发布或编辑论坛帖子
bbs_posts_draftzib_bbs_ajax_edit_posts保存论坛草稿
follow_platezib_bbs_ajax_follow_plate关注板块
favorite_postszib_bbs_ajax_favorite_posts收藏论坛帖子
score_extra / score_deductzib_bbs_ajax_posts_score评分
submit_votezib_bbs_ajax_submit_vote投票
answer_adoptzib_bbs_ajax_answer_adopt采纳回答
save_platezib_bbs_ajax_save_plate保存板块
save_plate_catzib_bbs_ajax_save_term保存板块分类
save_forum_topiczib_bbs_ajax_save_term保存话题
save_forum_tagzib_bbs_ajax_save_term保存标签

论坛动作常触发:

do_action('bbs_follow_plate', $id, $user_id);
do_action('bbs_favorite_posts', $id, $user_id, $type);
do_action('bbs_' . ($is_new ? 'add' : 'edit') . '_posts', $new_post_obj);
do_action('bbs_posts_topping_set', $post_id, $topping);
do_action('bbs_posts_essence_set', $post_id, $val);

商城动作

文件:

inc/functions/shop/action/action.php

核心动作:

Action回调用途
shop_add_cartzib_shop_ajax_add_cart加入购物车
shop_update_cartzib_shop_ajax_update_cart更新购物车
shop_save_user_addresszib_shop_ajax_save_user_address保存收货地址
shop_delete_user_addresszib_shop_ajax_delete_user_address删除收货地址
shop_order_commentzib_shop_order_comment商品订单评价
order_receive_confirmzib_shop_ajax_order_receive_confirm确认收货
order_after_sale_applyzib_shop_ajax_order_after_sale_apply申请售后
favorite_productzib_shop_ajax_favorite_product收藏商品

收藏商品后会触发:

do_action('shop_favorite_product', $id, $user_id);

商城订单、售后、物流动作必须以服务端订单状态为准,不要信任前端传来的价格、数量、收货人或订单归属。

Zibpay 动作

文件:

zibpay/functions/ajax.php
zibpay/functions/zibpay-ajax.php
zibpay/functions/zibpay-order.php
zibpay/functions/balance-ajax.php

核心动作:

Action回调用途
submit_orderzibpay_ajax_submit_order创建订单
initiate_payzibpay_ajax_initiate_pay发起支付
check_payzibpay_check_pay检查支付状态
pay_cashier_modalzibpay_ajax_pay_cashier_modal收银台弹窗
order_details_modalzibpay_ajax_order_details_modal订单详情
coupon_submitzibpay_ajax_coupon_submit提交优惠码
pay_vipzibpay_pay_vip_modalVIP 支付弹窗
pay_transferzibpay_ajax_pay_transfer余额转账
apply_withdrawzibpay_ajax_apply_withdraw申请提现

订单创建和支付成功 Hook:

do_action('order_created', $order_data);
do_action('payment_order_success', $order);

支付类动作必须幂等。payment_order_success 可能因为回调、轮询、后台修正重复触发,权益发放要检查订单状态和发放记录。

权限与校验

子比 Ajax 常见校验函数:

zib_ajax_wp_verify_nonce()
zib_ajax_verify_nonce()
zib_ajax_man_machine_verification()
zib_ajax_captcha_form_judgment()
zib_ajax_is_verify_user()
zib_ajax_debounce()

写入类动作至少确认:

  1. 当前用户是否登录。
  2. nonce 是否正确。
  3. 用户是否能操作目标对象。
  4. 目标 post、term、comment、order 是否存在。
  5. 状态是否允许变化。
  6. 金额、积分、库存、权限是否由服务端重新计算。

游客动作只适合登录注册、验证码、搜索、展示弹窗、公开列表、支付游客流程等明确允许的场景。

调试方式

浏览器 Network 面板重点看:

  • admin-ajax.php 是否请求成功。
  • action 是否和源码注册一致。
  • 是否带 _wpnoncepost_ididtype 等必要参数。
  • 响应 JSON 是否是子比 zib_send_json_* 结构。
  • 是否被 WAF、CDN、防火墙、缓存或登录态拦截。

PHP 侧调试建议写受控日志,不要把 SQL、服务器路径、密钥、支付回调原文直接返回给前端。

On this page