创建插件的目的

1.我们为什么要创建一个插件?

  • IT界有一个知名的论调叫做不要造重复的轮子,如果有可能的话,你应该尽可能的从现有的网络资源上选择一个已有的插件来使用,而不是重新创造一个。它耗费的精力很可能是没有相应价值的。所以在创建一个插件之前,你应该先去wordpress的插件仓库搜索关键词,看一下是不是已经有了满足需求的插件。

2.你希望你的插件具有什么功能?

  • 在开始开发之前,想好这个问题,能帮你省去很多麻烦。比如,你的插件是提供给前台页面使用的还是在后台页面使用的?是后台的独立模块么?它应该有哪几个页面,页面上应该有哪些功能?怎么去设计这个页面的布局?这些问题,都需要有一个清晰的规划。

前置工作

尽管我们在梳理开发流程中已经提到了如何创建一个插件,但是我们还是要再说一次,以防有些读者没有看到。

1.打开WordPress安装目录下的wp-content目录。

2.打开plugins目录。

3.创建一个新目录并在插件后命名(例如plugin-name)。

4.打开新插件的目录。

5.创建一个新的PHP文件(例如,在插件后命名此文件也很好plugin-name.php)。

开始开发

就像下面的示例一样,你必须在你创建的主插件文件的开头加上一段doc注释来告诉wordpress这是个插件,当然也可以加上作者,邮箱等信息,下面只是简单示例,详细可以在我们梳理流程的那边博文/或者官网中看到。

//wp-content/plugin-name/plugin-name.php
<?php
/**
* Plugin Name: 插件名称
*/
function do_something_else()
{
//.....你的代码
}

还记得我们在第一篇梳理中提到的三个基础插件钩子么?

1.register_activation_hook //启用插件时触发的钩子

2.register_deactivation_hook//禁用插件时触发的钩子

3.register_uninstall_hook//删除插件时触发的钩子

我们可以通过这三个钩子函数来做一下一些前置/后置的处理,比如说插件被启用时创建一个自定义数据表,初始化一些配置,禁用时恢复初始化设置,删除时删除自定义的数据表。

这里我们先不展开来讲我们在讲OptionApi的时候再讲这个。

准备工作都已经做好了,我们现在开始正式的开发。我们假设说我们要做的是一个额外的内容管理插件。那我们现在想要在后台创建一个定制内容管理菜单,该怎么做呢?

wordpress向我们提供了一个add_menu_page的函数:

/**
//我们先看一下函数的参数
add_menu_page(
string $page_title, //页面标题
string $menu_title, //菜单名称
string $capability, //权限级别
string $menu_slug, //菜单标识 唯一
callable $function = '', //回调函数 其实就是点击这个菜单后触发的函数 我们可以返回一个页面
string $icon_url = '', //图标,可以为空
int $position = null //位置 决定了菜单应该插入在第几个
);
**/

那我们应该怎么使用呢?

for-example :

你的wp-content/plugin-name/plugin-name.php文件,看起来应该像这样:

<?php
/*
Plugin Name: 定制内容管理
Plugin URI: http://ergou.fun
Description: 内容管理模块(自定义内容非posts)
Version: 1.0
Author: ergou
Author URI: http://ergou.fun Copyright 2019 ergou (email : 531432012@qq.com) This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2 of the License, or
(at your option) any later version. This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details. You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
*/ /** 第1步:创建自定义菜单的函数**/
function ergou_cms_plugin_menu()
{
add_menu_page('定制内容管理', '内容管理', 'manage_options', 'ergou-cms-manager', 'ergou_cms_plugin_options', '', 7); } /** 第2步:将函数注册到钩子中 */
add_action('admin_menu', 'ergou_cms_plugin_menu'); /** 第3步:定义选项被点击时打开的页面 */
function ergou_cms_plugin_options()
{
if (!current_user_can('manage_options')) {
wp_die(__('You do not have sufficient permissions to access this page.'));
}
//include_once(plugin_dir_path(__FILE__) . 'detail/index.php'); //也可以直接返回HTML,不过我建议是额外放一个文件,这样以后维护起来好处理 //你可以直接 echo "hello world"
echo "Hello World";
wp_die();
}

我们现在回到我们的后台管理页面点击插件管理你会发现多了一个,定制内容管理的菜单,点击启用。菜单就会增加在左侧顶级菜单里。点击定制内容管理菜单,页面输出了"Hello World"。至此,我们算是完成了第一步。

本篇内容就是这些。That’s all .Thank you .

wordpress插件开发从创建一个新的菜单开始的更多相关文章

  1. struts2每次访问都会创建一个新的session

    1.第一次 项目在测试过程中,突然发现登陆之后再去访问其他菜单时都会提示未登录: 查看日志之后发现是因为很多次请求时都会自动创建一个新的session,这就费解了, 因为之前也没改动什么session ...

  2. linux内核分析作业6:分析Linux内核创建一个新进程的过程

    task_struct结构: struct task_struct {   volatile long state;进程状态  void *stack; 堆栈  pid_t pid; 进程标识符  u ...

  3. Step by Step 创建一个新的Dynamics CRM Organization

    原创地址:http://www.cnblogs.com/jfzhu/p/4012833.html 转载请注明出处 前面演示过如何安装Dynamics CRM 2013,参见<Step by st ...

  4. Step by step 如何创建一个新森林

    原创地址:http://www.cnblogs.com/jfzhu/p/4006118.html 转载请注明出处 创建一个新森林就是在一台计算机上安装AD DS,并将这台计算机提升为域控制器. 演示环 ...

  5. 【Cocos2d-x for WP8 学习整理】(1)创建一个新项目

    喜大普奔                         10.1假期之前看到了一个很振奋的消息,就是随着Cocos2d-x 2.2的发布,WP8/WIN8有史以来第一次的合并到主版本了. 之前 V2 ...

  6. ZeroMQ接口函数之 :zmq_ctx_new – 创建一个新的ZMQ 环境上下文

    ZeroMQ 官方地址 :http://api.zeromq.org/4-0:zmq_ctx_new zmq_ctx_new(3)               ØMQ Manual - ØMQ/3.2 ...

  7. 第六周——分析Linux内核创建一个新进程的过程

    "万子恵 + 原创作品转载请注明出处 + <Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000029000 &q ...

  8. 分析Linux内核创建一个新进程的过程

    一.原理分析 1.进程的描述 进程控制块PCB——task_struct,为了管理进程,内核必须对每个进程进行清晰的描述,进程描述符提供了内核所需了解的进程信息. struct task_struct ...

  9. Android 创建一个新的Activity

    本文转载自:http://www.cnblogs.com/wuyudong/p/5658020.html 新建一个项目,创建一个java类,继承自Activity 新建一个Android.xml文件: ...

随机推荐

  1. 极度舒适的 Python 入门教程,小猪佩奇也能学会~

    编程几乎已经成为现代人的一门必修课,特别是 Python ,不仅长期霸占编程趋势榜.薪资榜第一,还屡屡进入小学教材,甚至成为浙江省信息技术高考项目-- 今天,小编带来了一门极度舒适的 Python 入 ...

  2. IP地址简介及Linux网络管理工具

    IP地址简介 IP地址又叫网络地址也称逻辑地址,由32位2进制数组成,分4段每段8位,由10进制数表示,范围0~,段与段之间用点隔开采用点分十进制的表示法,在一个网络中ip地址是唯一的,IP地址最主要 ...

  3. vue路由分区结合require.context使用

    1.先说路由分区 在router文件夹下新建你要分区的模块例如 登录  订单模块 新建文件 logn.router.js  order.router.js 代码如下: export default { ...

  4. 7月新的开始 - Axure学习04 - 发布与预览、菜单和表格元件、流程图和连接点、标记元件

    Axure 的发布与预览 1.发布 2.生成html文件 常规:指定浏览器.工具栏的生成 页面.页面说明.元件说明.交互.标志(logo和描述).字体.移动设备等 3.发布到Axshare Axure ...

  5. 修改git提交的用户名和密码

    目的:每个项目自定义Git提交的用户名和邮箱 1.在本地找到某个项目所在的地址 2.找到config文件 3.增加如下配置 4. ok,这样每个项目都可以定义提交者姓名和邮箱了

  6. h5格式化微信 nickname 保留第一个字,其余用*显示

    截取微信nickname中需要注意的是,表情符号和特殊字符,如果你不用正则过滤掉的话,使用slice(0,1)直接截取第一个字符串是不行的,因为表情符号占用两个字节,截取一半,ios会报错,andro ...

  7. spring security控制session

    spring security控制session本文给你描述在spring security中如何控制http session.包括session超时.启用并发session以及其他高级安全配置. 创 ...

  8. kubernetes 部署metricserver

    本篇适用于kubeadm部署的k8s的集群 安装环境:首先要部署好k8s的集群,版本是1.11.1,我的虚拟机部署的,一个master节点,一个node节点.笔记本性能有限 下载metrics-ser ...

  9. Elasticsearch环境搭建和介绍(Windows)

    一.Elasticsearch介绍和安装 1.1 介绍  Elastic Elastic官网:https://www.elastic.co/cn/ Elastic有一条完整的产品线:Elasticse ...

  10. P3478 [POI2008]STA-Station

    题目描述 The first stage of train system reform (that has been described in the problem Railways of the ...