WordPress 插件开发入门:从 add_action 到 register_activation_hook

· wordpress · 阅读 11
摘要

一个能上线的 WP 插件,骨架其实只有四块:头部注释、钩子注册、激活回调、卸载回调。下面按这四块拆。1. 头部注释

一个能上线的 WP 插件,骨架其实只有四块:头部注释、钩子注册、激活回调、卸载回调。下面按这四块拆。

1. 头部注释

<?php
/**
 * Plugin Name: My First Plugin
 * Description: 演示用插件
 * Version: 1.0.0
 * Requires at least: 6.0
 * Requires PHP: 7.4
 * Author: Your Name
 */

少了这几行,后台插件列表根本不会列出它。Requires at least 和 Requires PHP 建议写,WP 会据此阻止在过低环境里安装。

2. 挂动作

add_action('init', 'mfp_init');
function mfp_init(){
    // 注册自定义文章类型、短代码等
}

别在文件顶层直接调用注册函数,那时 WP 还没准备好,很多 API 都没加载。

3. 激活时做的事

register_activation_hook(__FILE__, 'mfp_activate');
function mfp_activate(){
    add_option('mfp_version', '1.0.0');
    if (! wp_next_scheduled('mfp_daily_event')) {
        wp_schedule_event(time(), 'daily', 'mfp_daily_event');
    }
}

激活回调只在启用时跑一次,适合建自定义表、写默认选项、安排定时任务。

4. 停用时清理

register_deactivation_hook(__FILE__, 'mfp_deactivate');
function mfp_deactivate(){
    wp_clear_scheduled_event('mfp_daily_event');
}

注意区分:停用(deactivation)可逆,卸载(uninstall)不可逆。删数据这种动作放在 uninstall.php 里,不要放在停用回调里,否则用户临时停一下插件,数据就没了。

最后一句

把插件代码包在学习模型里写,容易漏掉的就是权限检查。凡是处理表单或 AJAX 的函数,第一行必须是 current_user_can() 或 check_ajax_referer(),否则就是一个现成的越权漏洞。