1.声明一个插件

首先我们必须明白,wordpress的插件可以是单文件,也可以是多文件,css/html都不是必须的,以下举例暂且在单文件模式下

比如我们要创建一个名为 hellophp的插件,那我们就需要在wp-content/plugins目录下新建hellophp文件夹和hellophp.php文件,但是这还是不能让系统识别这个插件。插件的主文件名要和目录一致。

在wordpress中,要让系统识别一个插件,首先要做的就是,声明一个DOCBLOCK(文档块)

示例:

wp-content/plugins/hellophp/hellophp.php


  1. <?php
  2. /**
  3. * Plugin Name: hellophp
  4. * Plugin URI: https://example.com/plugins/the-basics/
  5. * Description: Basic WordPress Plugin Header Comment
  6. * Version: 0.0.0
  7. * Author: WordPress.org
  8. * Author URI: https://author.example.com/
  9. * License: GPL2
  10. * License URI: https://www.gnu.org/licenses/gpl-2.0.html
  11. * Text Domain: wporg
  12. * Domain Path: /languages
  13. */
  14. //完整的示例是这样,但是除了Plugin Name其他都不是必须的

2.初始化插件

  • wordpress-hook

    • register_activation_hook( FILE, ‘pluginprefix_function_to_run’ ); //启用插件时的钩子
    • register_deactivation_hook( FILE, ‘pluginprefix_function_to_run’ );//停用插件时的钩子

示例:

示例摘自官方文档,启动插件钩子最常见的用途之一是当插件注册自定义帖子类型时刷新WordPress永久链接。这摆脱了令人讨厌的404错误。

  1. //启用插件时的处理
  2. function pluginprefix_setup_post_type() {
  3. // register the "book" custom post type
  4. register_post_type( 'book', ['public' => 'true'] );
  5. }
  6. add_action( 'init', 'pluginprefix_setup_post_type' );
  7. function pluginprefix_install() {
  8. // trigger our function that registers the custom post type
  9. pluginprefix_setup_post_type();
  10. // clear the permalinks after the post type has been registered
  11. flush_rewrite_rules();
  12. }
  13. register_activation_hook( __FILE__, 'pluginprefix_install' );
  14. //停用插件时的处理
  15. function pluginprefix_deactivation() {
  16. // unregister the post type, so the rules are no longer in memory
  17. unregister_post_type( 'book' );
  18. // clear the permalinks to remove our post type's rules from the database
  19. flush_rewrite_rules();
  20. }
  21. register_deactivation_hook( __FILE__, 'pluginprefix_deactivation' );

如果您不熟悉注册自定义帖子类型,请不要担心 - 稍后将对此进行介绍。使用这个例子只是因为它很常见。

注:这部分看不懂也没关系,这两个钩子也并不是必须的,如果你要做一些必要的前置工作,比如说启用插件时,创建一个新的数据表,初始化一些变量之类的前置操作来保证插件的正常运行,可以使用这个钩子,如果没有这样的操作,这个钩子不用也可以。

3.插件的卸载

从站点卸载插件时,您的插件可能需要进行一些清理。

如果用户已停用插件,则会认为已卸载插件,然后单击WordPress管理中的删除链接。

卸载插件时,您需要清除插件和/或其他数据库实体(如表)的任何插件选项和/或设置。

卸载插件有两种方法:

  • 系统的钩子函数
  1. register_uninstall_hook(__FILE__, 'pluginprefix_function_to_run');
  • 自定义卸载脚本uninstall.php

你需要在你插件的根目录创建一个uninstall.php文件

示例:

示例脚本演示了一个删除自定义表的清理工作。

  1. // if uninstall.php is not called by WordPress, die
  2. // 防止误操作直接访问该文件
  3. if (!defined('WP_UNINSTALL_PLUGIN')) {
  4. die;
  5. }
  6. $option_name = 'wporg_option';
  7. //这两行是删除插件的一些附加配置,后边我会继续说这个
  8. delete_option($option_name);
  9. // for site options in Multisite
  10. delete_site_option($option_name);
  11. // drop a custom database table
  12. global $wpdb;
  13. $wpdb->query("DROP TABLE IF EXISTS {$wpdb->prefix}mytable");

这是wordpress插件开发流程梳理的第一篇,就先这样,后续会继续梳理。本文的示例和描述,大部分来自官方文档。

wordpress插件开发流程梳理的更多相关文章

  1. wordpress插件开发流程梳理-二

    开发插件的最佳实践 避免命名冲突 当您的插件对变量,函数或类使用相同的名称作为另一个插件时,会发生命名冲突. 幸运的是,您可以使用以下方法避免命名冲突. 程序性 默认情况下,所有变量,函数和类都在全局 ...

  2. zookeeper心跳机制流程梳理

    zookeeper心跳机制流程梳理 Processor链Chain protected void setupRequestProcessors() { RequestProcessor finalPr ...

  3. 黄聪:《跟黄聪学WordPress插件开发》

    续<跟黄聪学WordPress主题开发>之后,又一个作品完成!<跟黄聪学Wordpress插件开发>,国内最好的Wordpress插件开发视频教程!! 目录预览: WordPr ...

  4. WORDPRESS插件开发(二)HELLO WORLD改进版

    在上一篇文章中WORDPRESS插件开发(一)HELLO WORLD,演示了Hello World的最简单实现,只是在每篇文章的后面加入Hello World字符,而且字符也是写死的. 如果用户需要自 ...

  5. WORDPRESS插件开发学习(一)HELLO WORLD

    WORDPRESS插件开发学习系列文章第一篇,在每篇文章的后面追加固定的字符“Hello World” 一.打开wordpress目录->wp-content->plugins 二.在pl ...

  6. 《WordPress插件开发手冊》文件夹

    翻译前言:国内没有关于WordPress插件开发比較具体而且系统的资料 前言 第一章:准备一个本地开发环境 介绍 在你的电脑上安装一个站点server 下载并配置一个本地的WordPress 创建一个 ...

  7. Eureka服务端源码流程梳理

    一.简述 spring cloud三步走,一导包,二依赖,三配置为我们简化了太多东西,以至于很多东西知其然不知其所以然,了解底层实现之后对于一些问题我们也可以快速的定位问题所在. spring clo ...

  8. .16-浅析webpack源码之编译后流程梳理

    这节把编译打包后的流程梳理一下,然后集中处理compile. 之前忽略了一个点,如下: new NodeEnvironmentPlugin().apply(compiler); // 引入插件加载 i ...

  9. 北航操作系统实验2019:Lab4-1流程梳理

    北航操作系统实验2019:Lab4-1流程梳理 前言 操作系统的实验课实在令人头秃.我们需要在两周时间内学习相关知识.读懂指导书.读懂代码.补全代码.处理玄学bug和祖传bug,以及回答令人窒息的思考 ...

随机推荐

  1. [ipsec][strongswan] strongswan源码分析--(四)plugin加载优先级原理

    前言 如前所述, 我们知道,strongswan以插件功能来提供各种各样的功能.插件之间彼此相互提供功能,同时也有可能提供重复的功能. 这个时候,便需要一个优先级关系,来保证先后加载顺序. 方法 在配 ...

  2. C++——异常处理

    前言 大型和十分复杂的程序往往会产生一些很难查找的甚至是无法避免的运行时错误.当发生运行时错误时,不能简单地结束程序运行,而是退回到任务的起点,指出错误,并由用户决定下一步工作.面向对象的异常处理(e ...

  3. Python 使用 docopt 解析json参数文件

    1. 背景 在深度学习的任务中,通常需要比较复杂的参数以及输入输出配置,比如需要不同的训练data,不同的模型,写入不同的log文件,输出到不同的文件夹以免混淆输出 常用的parser.add()方法 ...

  4. JAVA设计模式之单例模式(单件模式)—Singleton Pattern

    1.什么是单例模式? <Head First 设计模式>中给出如下定义:确保一个类只有一个实例,并提供一个全局访问点. 关键词:唯一实例对象. 2.单例模式的实现方式: 2.1 懒汉式 对 ...

  5. python中json序列化时汉字变成编码的解决方式

    我们在使用json模块时,如果被序列化对象中不包含汉字,当然没有任何问题,但是有汉字会被编译成unicode码: import json dic = {","sex":& ...

  6. vue中watch的详细用法(转载)

    在vue中,使用watch来响应数据的变化.watch的用法大致有三种.下面代码是watch的一种简单的用法: <input type="text" v-model=&quo ...

  7. 前端面试:Vue.js常见的问题

    摘自今日头条用户:代码开发 原文链接: https://www.toutiao.com/a6683120112255369732/?tt_from=mobile_qq&utm_campaign ...

  8. 使用Costura.Fody插件将自己写的程序打包成一个可以独立运行的EXE文件

    我们在开发程序的时候会引用很多DLL文件,在程序完成编写后,如果不把这些引用的DLL打包,不能在其他电脑运行,那么很多同学可能在想了,能不能把我们编写好的程序打包成一个EXE文件,最好双击就能运行,当 ...

  9. javax.persistence.TransactionRequiredException: Executing an update/delete query

    最近在springboot中整合jpa的时候碰到一个异常,异常如下 javax.persistence.TransactionRequiredException: Executing an updat ...

  10. Codevs 1227 方格取数 2(费用流)

    1227 方格取数 2 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 大师 Master 查看运行结果 题目描述 Description 给出一个n*n的矩阵,每一格有一个非负整数 ...