侯体宗的博客
  • 首页
  • Hyperf版
  • beego仿版
  • 人生(杂谈)
  • 技术
  • 关于我
  • 更多分类
    • 文件下载
    • 文字修仙
    • 中国象棋ai
    • 群聊
    • 九宫格抽奖
    • 拼图
    • 消消乐
    • 相册

基础的WordPress插件制作教程

框架(架构)  /  管理员 发布于 7年前   232

插件制作准备工作

首先我们在\wp-content\plugins目录下添加一个文件夹叫做”My-Mood”,在文件夹中添加一个叫做index.php的主文件,这个是插件的主文件,文件的开始需要一些命名的格式:如下面的代码

 /*Plugin Name: My MoodPlugin URI: http://www.aips.meDescription: 一个心情发布插件Version: 1.0Author: 周良博客Author URI: http://www.aips.meLicense: GPL*/?>
  • Plugin Name 代表了插件的名字。
  • Plugin URI 代表的是插件的发布地址。
  • Description 代表的是关于这个插件的描述。
  • Version 代表了版本好,第一个版本使用1.0,如果你的插件有更新,就依次更改这个版本参数。
  • Author 代表插件作者的名字。
  • Author URI 代表作者的主页。。
  • License 代表了插件的License,如果你是开源的就使用GPL,关于License的参数可以百度或者Google查询,这里不再过多的篇幅叙述。

插件的初始化安装

插件不仅仅是样式的改变,通常我们会加入新的表,那么新加的表我就是通过插件的安装函数来完成的,我们继续在index.php中加入如下的代码:

 //激活动作register_activation_hook( __FILE__, 'my_mood_install');function my_mood_install() {// 启用时要做的事情global $wpdb;$table_name = $wpdb->prefix . "mood";$charset_collate = $wpdb->get_charset_collate();$sql = "CREATE TABLE $table_name (id mediumint(9) NOT NULL AUTO_INCREMENT,createdon datetime DEFAULT '0000-00-00 00:00:00' NOT NULL,publishedon datetime DEFAULT '0000-00-00 00:00:00' NOT NULL,status int NOT NULL,mood int NOT NULL,text text NOT NULL,address varchar(55) DEFAULT '' NOT NULL,UNIQUE KEY id (id)) $charset_collate;";require_once( ABSPATH . 'wp-admin/includes/upgrade.php' );dbDelta( $sql );}?>

如上面代码的注释,我们通过register_activation_hook激活动作来完成插件的安装,激活动作通过参数my_mood_install,找到名为my_mood_install的函数执行,这个动作会在插件激活的时候执行。

我们通过my_mood_install函数创建了一张名为”mood”的表,数据库表的创建是通过Wordpress的dbDelta函数来执行sql语句完成的,要想使用此函数需要先引入wp-admin/includes/upgrade.php文件。

通过上面的代码我们就运用Wordpress内置的方法创建了一张给mood插件存储数据的表。

插件卸载

既然Wordpress有安装也一定会有卸载。Wordpress插件的卸载方法是通过一个叫做uninstall.php的固定命名文件来执行的,在插件根目录下建一个名叫uninstall.php的文件,代码内容如下所示:

 //卸载动作my_mood_uninstall();function my_mood_uninstall() {// 执行内容global $wpdb;$table_name = $wpdb->prefix . "mood";$wpdb->query("DROP TABLE IF EXISTS " . $table_name);}?>

通过Wordpress的$wpdb->query来执行sql,删除我们安装时的创建的表,这样就删除一切与该插件相关的内容了。

给插件添加后台管理菜单

如下面的代码:

 //添加菜单add_action( 'admin_menu', 'my_mood_create_menu' );function my_mood_create_menu() {global $my_settings;$my_mood_settings=add_menu_page("My Mood","My Mood","manage_options","my-mood","test");}?>

通过上面的代码我们就可以为插件添加一个菜单。方法通过add_action( ‘admin_menu', ‘my_mood_create_menu' )添加一个菜单而菜单具体的页面则是通过参数来绑定的,如上面的方法是传入了叫做”test”的参数,因此当点击这个”My Mood”的菜单的时候就会去寻找叫做”test”的方法进行样式的输出,我们给出test方法

 function test(){global $wpdb;$table_name = $wpdb->prefix . "mood";$fivesdrafts = $wpdb->get_results("SELECT id, createdon, publishedon,status,mood,text,addressFROM $table_nameORDER BY createdon DESC");?>
foreach ( $fivesdrafts as $fivesdraft ){?> }?>
发布内容现在所在的心情创建日期操作
发布内容现在所在的心情创建日期操作
添加
text; ?>'/>address; ?>'/>保存删除
}?>

test方法是php与html代码混编的样式,其中HTMl部分主要负责样式的输出,而PHP的代码则是负责执行取数据的逻辑。主要从数据库读取数据的部分,通过Wordpress的$wpdb->get_results方法就可以从数据库中取出我们第一步中创建的表中的数据,返回的是一个数据集合,包含了多条数据。最后通过foreach循环将数据输出。

我们把数据的界面显示出来了,那么怎样才能将数据保存呢?同样根据上一篇心情插件的例子,先看下面的代码

 function aad_load_scripts($hook) {global $my_settings;if( $hook != $my_settings )return;/*载入ajax的js文件,也可以载入其他的javascript和/或css等*/wp_enqueue_script('my-ajax', plugins_url( 'my-mood/js/index.js', __FILE ), array('jquery'));wp_register_style( 'my-style', plugins_url( 'my-mood/css/style.css', __FILE ), array(), '', 'all' );wp_enqueue_style( 'my-style' );/*创建验证nonce它会输出类似于:之类的被注释掉的js到HTML。*/wp_localize_script('my-js', 'my_vars', array('my_nonce' => wp_create_nonce('aad-nonce')));}add_action('admin_enqueue_scripts', 'aad_load_scripts');?>

其中index.js的代码如下

jQuery(document).ready(function(){jQuery("input").blur(function(){var value=jQuery(this).val();jQuery.ajax({type:"POST",url:"/wp-admin/admin-ajax.php",dataType: 'json',data:{action:"say",value:value},success:function(data){}});})jQuery(".add").click(function(){var parent=jQuery(this).closest("tr");var text=jQuery(parent).find("input[name='text']").val();var address=jQuery(parent).find("input[name='address']").val();var mood=jQuery(parent).find("input[type='radio']:checked").val();jQuery.ajax({type:"POST",url:"/wp-admin/admin-ajax.php",dataType: 'json',data:{action:"add_mood",text:text,address:address,mood:mood},success:function(data){window.location.href=window.location;}});})jQuery(".delete").click(function(){var parent=jQuery(this).closest("tr");var id=jQuery(parent).attr('data');jQuery.ajax({type:"POST",url:"/wp-admin/admin-ajax.php",dataType: 'json',data:{action:"delete_mood",id:id},success:function(data){window.location.href=window.location;}});})jQuery(".edit").click(function(){var parent=jQuery(this).closest("tr");var id=jQuery(parent).attr('data');var text=jQuery(parent).find("input[name='text']").val();var address=jQuery(parent).find("input[name='address']").val();var mood=jQuery(parent).find("input[type='radio']:checked").val();jQuery.ajax({type:"POST",url:"/wp-admin/admin-ajax.php",dataType: 'json',data:{action:"edit_mood",id:id,text:text,address:address,mood:mood},success:function(data){window.location.href=window.location;}});})});

在上面的代码中我们通过Hook插入我们需要js代码和css代码,这样我们插件的js和css就会因为插件的启用而插入到页面代码中。
我们实现异步加载数据,要根据下面的代码:

 function say(){$return=array();$return['success'] = '1';$return['msg']=$_POST['value']."test-ajax";echo json_encode($return);die();}add_action('wp_ajax_say', 'say');?>

这段代码的意思是要使用ajax提交数据,add_action(‘wp_ajax_函数名',函数名)的格式就是注册一个say路由,它对应的js代码是

jQuery("input").blur(function(){var value=jQuery(this).val();jQuery.ajax({type:"POST",url:"/wp-admin/admin-ajax.php",dataType: 'json',data:{action:"say",value:value},success:function(data){}});})

因此可以看到js代码的action为say

同样的道理数据要进行添加,注册一个add_mood的路由

 function add_mood(){$text=$_POST['text'];$address=$_POST['address'];$mood=$_POST['mood'];add($text,$address,$mood);$return=array();$return['success'] = '1';echo json_encode($return);die();}add_action('wp_ajax_add_mood', 'add_mood');?>

数据要进行删除,注册一个delete_mood的路由

 function delete_mood(){$id=$_POST['id'];delete($id);$return=array();$return['success'] = '1';echo json_encode($return);die();}add_action('wp_ajax_delete_mood', 'delete_mood');?>

数据要进行编辑,注册一个edit_mood的路由

 function edit_mood(){$id=$_POST['id'];$text=$_POST['text'];$address=$_POST['address'];$mood=$_POST['mood'];edit($id,$text,$address,$mood);$return=array();$return['success'] = '1';echo json_encode($return);die();}add_action('wp_ajax_edit_mood', 'edit_mood');?>

对应上面增删改的php函数如下所示

 function add($text,$address,$mood){global $wpdb;$table_name = $wpdb->prefix . "mood";$wpdb->insert($table_name,array('createdon' => current_time( 'mysql' ),'publishedon' => current_time( 'mysql' ),'status' => 1,'mood' => $mood,'text'=>$text,'address'=>$address,));}?> function delete($id){global $wpdb;$table_name = $wpdb->prefix . "mood";$wpdb->delete($table_name,array('id'=>$id));}?> function edit($id,$text,$address,$mood){global $wpdb;$table_name = $wpdb->prefix . "mood";$wpdb->update($table_name,array('mood' => $mood,'text'=>$text,'address'=>$address,),array('id' => $id));}?>

现在插件的后台数据和界面都已经处理完了,那么怎样把我们的心情插件在前台引用呢?我们需要添加下面的代码

 function mood_dispaly(){global $wpdb;$table_name = $wpdb->prefix . "mood";$fivesdrafts = $wpdb->get_results("SELECT textFROM $table_nameORDER BY createdon DESCLIMIT 10");?> }?>

这段代码就把数据库中存储的心情数据通过HTML显示在前台,那么样子哪里控制的呢?还记得第一步我们添加的js和css吗,是的,样式就是通过第一步插入的样式来控制的。

到此一个完整的心情插件就完成了,照着例子你就可以制作一个属于自己的心情插件了。

您可能感兴趣的文章:

  • WordPress中卸载插件以及移除文章类型组件的代码示例
  • 详解WordPress中提醒安装插件以及隐藏插件的功能实现
  • WordPress中使主题支持小工具以及添加插件启用函数
  • 利用Fix Rss Feeds插件修复WordPress的Feed显示错误
  • 几个优化WordPress中JavaScript加载体验的插件介绍
  • 在WordPress中使用wp-cron插件来设置定时任务
  • WordPress升级版本及安装插件出现”Problem with the SSL CA cert”的解决办法
  • 推荐十款免费 WordPress 插件
  • 用js代码和插件实现wordpress雪花飘落效果的四种方法
  • 在WordPress中安装使用视频播放器插件Hana Flv Player


  • 上一条:
    WordPress迁移时一些常见问题的解决方法整理
    下一条:
    优化WordPress的Google字体以加速国内服务器上的运行
  • 昵称:

    邮箱:

    0条评论 (评论内容有缓存机制,请悉知!)
    最新最热
    • 分类目录
    • 人生(杂谈)
    • 技术
    • linux
    • Java
    • php
    • 框架(架构)
    • 前端
    • ThinkPHP
    • 数据库
    • 微信(小程序)
    • Laravel
    • Redis
    • Docker
    • Go
    • swoole
    • Windows
    • Python
    • 苹果(mac/ios)
    • 相关文章
    • Filament v3.1版本发布(0个评论)
    • docker + gitea搭建一个git服务器流程步骤(0个评论)
    • websocket的三种架构方式使用优缺点浅析(0个评论)
    • ubuntu20.4系统中宿主机安装nginx服务,docker容器中安装php8.2实现运行laravel10框架网站(0个评论)
    • phpstudy_pro(小皮面板)中安装最新php8.2.9版本流程步骤(0个评论)
    • 近期文章
    • 在go中实现一个常用的先进先出的缓存淘汰算法示例代码(0个评论)
    • 在go+gin中使用"github.com/skip2/go-qrcode"实现url转二维码功能(0个评论)
    • 在go语言中使用api.geonames.org接口实现根据国际邮政编码获取地址信息功能(1个评论)
    • 在go语言中使用github.com/signintech/gopdf实现生成pdf分页文件功能(0个评论)
    • gmail发邮件报错:534 5.7.9 Application-specific password required...解决方案(0个评论)
    • 欧盟关于强迫劳动的规定的官方举报渠道及官方举报网站(0个评论)
    • 在go语言中使用github.com/signintech/gopdf实现生成pdf文件功能(0个评论)
    • Laravel从Accel获得5700万美元A轮融资(0个评论)
    • 在go + gin中gorm实现指定搜索/区间搜索分页列表功能接口实例(0个评论)
    • 在go语言中实现IP/CIDR的ip和netmask互转及IP段形式互转及ip是否存在IP/CIDR(0个评论)
    • 近期评论
    • 122 在

      学历:一种延缓就业设计,生活需求下的权衡之选中评论 工作几年后,报名考研了,到现在还没认真学习备考,迷茫中。作为一名北漂互联网打工人..
    • 123 在

      Clash for Windows作者删库跑路了,github已404中评论 按理说只要你在国内,所有的流量进出都在监控范围内,不管你怎么隐藏也没用,想搞你分..
    • 原梓番博客 在

      在Laravel框架中使用模型Model分表最简单的方法中评论 好久好久都没看友情链接申请了,今天刚看,已经添加。..
    • 博主 在

      佛跳墙vpn软件不会用?上不了网?佛跳墙vpn常见问题以及解决办法中评论 @1111老铁这个不行了,可以看看近期评论的其他文章..
    • 1111 在

      佛跳墙vpn软件不会用?上不了网?佛跳墙vpn常见问题以及解决办法中评论 网站不能打开,博主百忙中能否发个APP下载链接,佛跳墙或极光..
    • 2018-05
    • 2020-02
    • 2020-03
    • 2020-05
    • 2020-06
    • 2020-07
    • 2020-08
    • 2020-11
    • 2021-03
    • 2021-09
    • 2021-10
    • 2021-11
    • 2022-01
    • 2022-02
    • 2022-03
    • 2022-08
    • 2023-08
    • 2023-10
    • 2023-12
    Top

    Copyright·© 2019 侯体宗版权所有· 粤ICP备20027696号 PHP交流群

    侯体宗的博客