亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 開發 > PHP > 正文

基礎的WordPress插件制作教程

2024-05-04 23:40:34
字體:
來源:轉載
供稿:網友

這篇文章主要介紹了基礎的WordPress插件制作教程,包括基本的使用ajax提交數據的實現,需要的朋友可以參考下

插件制作準備工作

首先我們在/wp-content/plugins目錄下添加一個文件夾叫做”My-Mood”,在文件夾中添加一個叫做index.php的主文件,這個是插件的主文件,文件的開始需要一些命名的格式:如下面的代碼

 

 
  1. <!--?php <br ?--> /* 
  2. Plugin Name: My Mood 
  3. Plugin URI: http://www.aips.me 
  4. Description: 一個心情發布插件 
  5. Version: 1.0 
  6. Author: 周良博客 
  7. Author URI: http://www.aips.me 
  8. License: GPL 
  9. */ 
  10. ?> 

Plugin Name 代表了插件的名字。

Plugin URI 代表的是插件的發布地址。

Description 代表的是關于這個插件的描述。

Version 代表了版本好,第一個版本使用1.0,如果你的插件有更新,就依次更改這個版本參數。

Author 代表插件作者的名字。

Author URI 代表作者的主頁。。

License 代表了插件的License,如果你是開源的就使用GPL,關于License的參數可以百度或者Google查詢,這里不再過多的篇幅敘述。

插件的初始化安裝

插件不僅僅是樣式的改變,通常我們會加入新的表,那么新加的表我就是通過插件的安裝函數來完成的,我們繼續在index.php中加入如下的代碼:

 

 
  1. <!--?php <br ?--> //激活動作 
  2. register_activation_hook( __FILE__, 'my_mood_install'); 
  3.  
  4. function my_mood_install() { 
  5.  
  6. // 啟用時要做的事情 
  7. global $wpdb; 
  8.  
  9. $table_name = $wpdb->prefix . "mood"
  10.  
  11. $charset_collate = $wpdb->get_charset_collate(); 
  12.  
  13. $sql = "CREATE TABLE $table_name ( 
  14. id mediumint(9) NOT NULL AUTO_INCREMENT, 
  15. createdon datetime DEFAULT '0000-00-00 00:00:00' NOT NULL, 
  16. publishedon datetime DEFAULT '0000-00-00 00:00:00' NOT NULL, 
  17. status int NOT NULL, 
  18. mood int NOT NULL, 
  19. text text NOT NULL, 
  20. address varchar(55) DEFAULT '' NOT NULL, 
  21. UNIQUE KEY id (id) 
  22. ) $charset_collate;"; 
  23.  
  24. require_once( ABSPATH . 'wp-admin/includes/upgrade.php' ); 
  25. dbDelta( $sql ); 
  26. ?> 

如上面代碼的注釋,我們通過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的文件,代碼內容如下所示:

 

 
  1. <!--?php <br ?--> //卸載動作 
  2. my_mood_uninstall(); 
  3.  
  4. function my_mood_uninstall() { 
  5.  
  6. // 執行內容 
  7. global $wpdb; 
  8. $table_name = $wpdb->prefix . "mood"
  9. $wpdb->query("DROP TABLE IF EXISTS " . $table_name); 
  10. ?> 

通過Wordpress的$wpdb->query來執行sql,刪除我們安裝時的創建的表,這樣就刪除一切與該插件相關的內容了。

給插件添加后臺管理菜單

如下面的代碼:

 

 
  1. <!--?php <br ?--> //添加菜單 
  2. add_action( 'admin_menu''my_mood_create_menu' ); 
  3. function my_mood_create_menu() { 
  4. global $my_settings; 
  5. $my_mood_settings=add_menu_page( 
  6. "My Mood"
  7. "My Mood"
  8. "manage_options"
  9. "my-mood"
  10. "test" 
  11. ); 
  12. ?> 

通過上面的代碼我們就可以為插件添加一個菜單。方法通過add_action( ‘admin_menu', ‘my_mood_create_menu' )添加一個菜單而菜單具體的頁面則是通過參數來綁定的,如上面的方法是傳入了叫做”test”的參數,因此當點擊這個”My Mood”的菜單的時候就會去尋找叫做”test”的方法進行樣式的輸出,我們給出test方法

 

 
  1. <!--?php <br ?--> function test(){ 
  2. global $wpdb; 
  3. $table_name = $wpdb->prefix . "mood"
  4.  
  5. $fivesdrafts = $wpdb->get_results( 
  6. SELECT id, createdon, publishedon,status,mood,text,address 
  7. FROM $table_name 
  8. ORDER BY createdon DESC 
  9. ); 
  10. ?> 
  11. <div id="my-mood">foreach ( $fivesdrafts as $fivesdraft ) 
  12. ?> } 
  13. ?> 
  14. <table class="widefat"
  15. <thead> 
  16. <tr> 
  17. <th>發布內容</th> 
  18. <th>現在所在的</th> 
  19. <th>心情</th> 
  20. <th>創建日期</th> 
  21. <th>操作</th> 
  22. </tr> 
  23. </thead> 
  24. <tfoot> 
  25. <tr> 
  26. <th>發布內容</th> 
  27. <th>現在所在的</th> 
  28. <th>心情</th> 
  29. <th>創建日期</th> 
  30. <th>操作</th> 
  31. </tr> 
  32. </tfoot> 
  33. <tbody> 
  34. <tr> 
  35. <td><input name="text" type="text" value="" placeholder="輸入你的心情" /></td> 
  36. <td><input name="address" type="text" value="" placeholder="輸入現在所在地" /></td> 
  37. <td><label>高興:<input class="mood" checked="checked" name="mood" type="radio" value="0" /></label> 
  38. <label>一般:<input class="mood" name="mood" type="radio" value="1" /></label> 
  39. <label>悲傷:<input class="mood" name="mood" type="radio" value="2" /></label> 
  40. <label>憂慮:<input class="mood" name="mood" type="radio" value="3" /></label> 
  41. <label>其他:<input class="mood" name="mood" type="radio" value="4" /></label></td> 
  42. <td></td> 
  43. <td><a class="add">添加</a></td> 
  44. </tr> 
  45. <!--?php <br ?--> 
  46. <tr> 
  47. <td><input name="text" type="text" value="'<?php" />text; ?>'/></td> 
  48. <td><input name="address" type="text" value="'<?php" />address; ?>'/></td> 
  49. <td><label>高興:<input class="mood" name="mood<?php echo $fivesdraft->id; ?>" type="radio" />mood==0?'checked=checked':''; ?> value="0"></label> 
  50. <label>一般:<input class="mood" name="mood<?php echo $fivesdraft->id; ?>" type="radio" />mood=='1'?'checked=checked':''; ?> value="1"></label> 
  51. <label>悲傷:<input class="mood" name="mood<?php echo $fivesdraft->id; ?>" type="radio" />mood==2?'checked=checked':''; ?> value="2"></label> 
  52. <label>憂慮:<input class="mood" name="mood<?php echo $fivesdraft->id; ?>" type="radio" />mood==3?'checked=checked':''; ?> value="3"></label> 
  53. <label>其他:<input class="mood" name="mood<?php echo $fivesdraft->id; ?>" type="radio" />mood==4?'checked=checked':''; ?> value="4"></label></td> 
  54. <td></td> 
  55. <td><a class="edit">保存</a><a class="delete">刪除</a></td> 
  56. </tr> 
  57. <!--?php <br ?--></tbody> 
  58. </table> 
  59. </div> 
  60. <!--?php <br ?--> } 
  61. ?> 

test方法是php與html代碼混編的樣式,其中HTMl部分主要負責樣式的輸出,而PHP的代碼則是負責執行取數據的邏輯。主要從數據庫讀取數據的部分,通過Wordpress的$wpdb->get_results方法就可以從數據庫中取出我們第一步中創建的表中的數據,返回的是一個數據集合,包含了多條數據。最后通過foreach循環將數據輸出。

我們把數據的界面顯示出來了,那么怎樣才能將數據保存呢?同樣根據上一篇心情插件的例子,先看下面的代碼

 

 
  1. <!--?php <br ?--> function aad_load_scripts($hook) { 
  2. global $my_settings; 
  3. if( $hook != $my_settings ) 
  4. return
  5. /*載入ajax的js文件,也可以載入其他的javascript和/或css等*/ 
  6. wp_enqueue_script('my-ajax', plugins_url( 'my-mood/js/index.js', __FILE ), array('jquery')); 
  7.  
  8. wp_register_style( 'my-style', plugins_url( 'my-mood/css/style.css', __FILE ), array(), '''all' ); 
  9. wp_enqueue_style( 'my-style' ); 
  10.  
  11. /* 
  12. 創建驗證nonce 
  13. 它會輸出類似于: 
  14. <![CDATA[ 
  15. var aad_vars = {"aad_nonce":"5c18514d34"}; 
  16. ]]> 
  17. 之類的被注釋掉的js到HTML。 
  18. */ 
  19. wp_localize_script('my-js''my_vars', array( 
  20. 'my_nonce' => wp_create_nonce('aad-nonce'
  21. ); 
  22. add_action('admin_enqueue_scripts''aad_load_scripts'); 
  23. ?> 

其中index.js的代碼如下

 

 
  1. jQuery(document).ready(function(){ 
  2. jQuery("input").blur(function(){ 
  3. var value=jQuery(this).val(); 
  4. jQuery.ajax({ 
  5. type:"POST"
  6. url:"/wp-admin/admin-ajax.php"
  7. dataType: 'json'
  8. data:{action:"say",value:value}, 
  9. success:function(data){ 
  10. }); 
  11. }) 
  12.  
  13. jQuery(".add").click(function(){ 
  14. var parent=jQuery(this).closest("tr"); 
  15.  
  16. var text=jQuery(parent).find("input[name='text']").val(); 
  17. var address=jQuery(parent).find("input[name='address']").val(); 
  18. var mood=jQuery(parent).find("input[type='radio']:checked").val(); 
  19. jQuery.ajax({ 
  20. type:"POST"
  21. url:"/wp-admin/admin-ajax.php"
  22. dataType: 'json'
  23. data:{action:"add_mood",text:text,address:address,mood:mood}, 
  24. success:function(data){ 
  25. window.location.href=window.location; 
  26. }); 
  27. }) 
  28.  
  29. jQuery(".delete").click(function(){ 
  30. var parent=jQuery(this).closest("tr"); 
  31.  
  32. var id=jQuery(parent).attr('data'); 
  33. jQuery.ajax({ 
  34. type:"POST"
  35. url:"/wp-admin/admin-ajax.php"
  36. dataType: 'json'
  37. data:{action:"delete_mood",id:id}, 
  38. success:function(data){ 
  39. window.location.href=window.location; 
  40. }); 
  41. }) 
  42.  
  43. jQuery(".edit").click(function(){ 
  44. var parent=jQuery(this).closest("tr"); 
  45.  
  46. var id=jQuery(parent).attr('data'); 
  47. var text=jQuery(parent).find("input[name='text']").val(); 
  48. var address=jQuery(parent).find("input[name='address']").val(); 
  49. var mood=jQuery(parent).find("input[type='radio']:checked").val(); 
  50. jQuery.ajax({ 
  51. type:"POST"
  52. url:"/wp-admin/admin-ajax.php"
  53. dataType: 'json'
  54. data:{action:"edit_mood",id:id,text:text,address:address,mood:mood}, 
  55. success:function(data){ 
  56. window.location.href=window.location; 
  57. }); 
  58. }) 
  59.  
  60. }); 

在上面的代碼中我們通過Hook插入我們需要js代碼和css代碼,這樣我們插件的js和css就會因為插件的啟用而插入到頁面代碼中。

我們實現異步加載數據,要根據下面的代碼:

 

  1. <!--?php <br ?--> function say(){ 
  2. $return=array(); 
  3. $return['success'] = '1'
  4. $return['msg']=$_POST['value']."test-ajax"
  5. echo json_encode($return); 
  6. die(); 
  7. add_action('wp_ajax_say''say'); 
  8. ?> 

這段代碼的意思是要使用ajax提交數據,add_action(‘wp_ajax_函數名',函數名)的格式就是注冊一個say路由,它對應的js代碼是

 

  1. jQuery("input").blur(function(){ 
  2. var value=jQuery(this).val(); 
  3. jQuery.ajax({ 
  4. type:"POST"
  5. url:"/wp-admin/admin-ajax.php"
  6. dataType: 'json'
  7. data:{action:"say",value:value}, 
  8. success:function(data){ 
  9. }); 
  10. }) 

因此可以看到js代碼的action為say

同樣的道理數據要進行添加,注冊一個add_mood的路由

 

 
  1. <!--?php <br ?--> function add_mood(){ 
  2.  
  3. $text=$_POST['text']; 
  4. $address=$_POST['address']; 
  5. $mood=$_POST['mood']; 
  6. add($text,$address,$mood); 
  7.  
  8. $return=array(); 
  9. $return['success'] = '1'
  10. echo json_encode($return); 
  11. die(); 
  12. add_action('wp_ajax_add_mood''add_mood'); 
  13. ?> 

數據要進行刪除,注冊一個delete_mood的路由

 

 
  1. <!--?php <br ?--> function delete_mood(){ 
  2.  
  3. $id=$_POST['id']; 
  4. delete($id); 
  5.  
  6. $return=array(); 
  7. $return['success'] = '1'
  8. echo json_encode($return); 
  9. die(); 
  10. add_action('wp_ajax_delete_mood''delete_mood'); 
  11. ?> 

數據要進行編輯,注冊一個edit_mood的路由

 

 
  1. <!--?php <br ?--> function edit_mood(){ 
  2.  
  3. $id=$_POST['id']; 
  4. $text=$_POST['text']; 
  5. $address=$_POST['address']; 
  6. $mood=$_POST['mood']; 
  7. edit($id,$text,$address,$mood); 
  8.  
  9. $return=array(); 
  10. $return['success'] = '1'
  11. echo json_encode($return); 
  12. die(); 
  13. add_action('wp_ajax_edit_mood''edit_mood'); 
  14. ?> 

對應上面增刪改的php函數如下所示

 

 
  1. <!--?php <br ?--> function add($text,$address,$mood){ 
  2. global $wpdb; 
  3.  
  4. $table_name = $wpdb->prefix . "mood"
  5. $wpdb->insert( 
  6. $table_name, 
  7. array( 
  8. 'createdon' => current_time( 'mysql' ), 
  9. 'publishedon' => current_time( 'mysql' ), 
  10. 'status' => 1, 
  11. 'mood' => $mood, 
  12. 'text'=>$text, 
  13. 'address'=>$address, 
  14. ); 
  15. ?> 
  16.  
  17. <!--?php <br ?--> function delete($id){ 
  18. global $wpdb; 
  19.  
  20. $table_name = $wpdb->prefix . "mood"
  21. $wpdb->delete
  22. $table_name, 
  23. array( 
  24. 'id'=>$id 
  25. ); 
  26. ?> 
  27.  
  28. <!--?php <br ?--> function edit($id,$text,$address,$mood){ 
  29. global $wpdb; 
  30.  
  31. $table_name = $wpdb->prefix . "mood"
  32. $wpdb->update( 
  33. $table_name, 
  34. array( 
  35. 'mood' => $mood, 
  36. 'text'=>$text, 
  37. 'address'=>$address, 
  38. ), 
  39. array( 
  40. 'id' => $id 
  41. ); 
  42. ?> 

現在插件的后臺數據和界面都已經處理完了,那么怎樣把我們的心情插件在前臺引用呢?我們需要添加下面的代碼

 

 
  1. <!--?php <br ?--> function mood_dispaly(){ 
  2. global $wpdb; 
  3. $table_name = $wpdb->prefix . "mood"
  4.  
  5. $fivesdrafts = $wpdb->get_results( 
  6. SELECT text 
  7. FROM $table_name 
  8. ORDER BY createdon DESC 
  9. LIMIT 10 
  10. ); 
  11.  
  12. ?> 
  13.  
  14. <!--?php <br ?--> } 
  15. ?> 

這段代碼就把數據庫中存儲的心情數據通過HTML顯示在前臺,那么樣子哪里控制的呢?還記得第一步我們添加的js和css嗎,是的,樣式就是通過第一步插入的樣式來控制的。

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


注:相關教程知識閱讀請移步到PHP教程頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
精品毛片三在线观看| 国产99久久久欧美黑人| 久久躁狠狠躁夜夜爽| 欧美一区二区.| 欧美精品手机在线| 国产丝袜一区视频在线观看| 另类专区欧美制服同性| 中文字幕综合在线| 亚洲丝袜一区在线| 成人亚洲激情网| 亚洲欧美制服综合另类| 日韩在线观看免费| 国自在线精品视频| 国产丝袜一区二区三区| 欧美激情日韩图片| 国产乱人伦真实精品视频| 欧美视频在线观看 亚洲欧| 国产亚洲精品美女久久久| 久久久久久综合网天天| 人妖精品videosex性欧美| 亚洲欧美中文日韩在线v日本| 欧美极品少妇xxxxⅹ免费视频| 这里只有精品视频在线| 91九色综合久久| 国产成人一区二区三区小说| 日韩精品在线视频观看| 隔壁老王国产在线精品| 欧美激情videoshd| 国产亚洲精品久久久久久牛牛| 91性高湖久久久久久久久_久久99| 中文字幕在线视频日韩| 久久久久成人精品| 日韩中文字幕国产精品| 日本老师69xxx| 亚洲日本欧美日韩高观看| 色婷婷综合久久久久中文字幕1| 在线播放精品一区二区三区| 欧美综合一区第一页| 日本午夜精品理论片a级appf发布| 伊人久久男人天堂| 亚洲综合中文字幕在线观看| 成人午夜黄色影院| 国产69精品久久久久9| 国产69精品久久久久99| 国模叶桐国产精品一区| 国产精品久久久久久av福利| 美日韩精品免费视频| 久久中文字幕在线| 欧美精品性视频| 欧美猛交免费看| 国产日韩视频在线观看| 精品一区二区亚洲| 欧美激情小视频| 亚洲黄色av网站| 日本精品视频在线播放| 91九色单男在线观看| 国产日韩在线看片| 国产精品爱久久久久久久| 久久露脸国产精品| 色综合伊人色综合网站| 国产盗摄xxxx视频xxx69| 久久激情五月丁香伊人| 日韩在线免费av| 性色av一区二区三区| 亲爱的老师9免费观看全集电视剧| 欧美视频国产精品| 亚洲精品理论电影| 91精品久久久久久久久青青| 国产精选久久久久久| 成人做爽爽免费视频| 国产日韩精品视频| 这里只有精品视频| 亚洲欧美日韩精品久久| 日本久久久久亚洲中字幕| 亚洲第五色综合网| 国产主播精品在线| 97精品一区二区视频在线观看| 国模私拍视频一区| 大荫蒂欧美视频另类xxxx| 欧美整片在线观看| 在线播放精品一区二区三区| 欧美日韩亚洲激情| 欧美一乱一性一交一视频| 国产精品成av人在线视午夜片| 色中色综合影院手机版在线观看| 欧美精品久久一区二区| 欧美午夜宅男影院在线观看| 欧美裸体xxxx| 欧美国产视频一区二区| 日韩精品在线免费播放| 欧美日韩国产精品一区二区三区四区| 欧美第一黄网免费网站| 久久视频在线直播| 久久久久久亚洲精品不卡| 91亚洲国产精品| 国产精品嫩草影院一区二区| 国产精品99一区| 国产福利精品av综合导导航| 久久九九有精品国产23| 久久中文字幕在线视频| 日韩高清不卡av| 日韩av免费在线看| 精品国内亚洲在观看18黄| 日韩av成人在线观看| 欧美国产精品人人做人人爱| 日韩欧美在线观看| 欧美xxxx18国产| 国产欧美精品一区二区| 欧美在线观看网站| 亚洲国产天堂久久综合网| 国产精品视频网址| 日韩成人中文电影| 国产欧美va欧美va香蕉在| 日韩亚洲欧美成人| 91精品视频免费| 91久久精品日日躁夜夜躁国产| 91在线观看免费高清完整版在线观看| 国内免费精品永久在线视频| 成人精品久久av网站| 国产日韩精品综合网站| 日韩美女视频在线观看| 日韩av电影免费观看高清| 91亚洲精品久久久久久久久久久久| 26uuu另类亚洲欧美日本一| 一区二区国产精品视频| 91精品国产91久久久久久最新| 亚洲自拍欧美另类| 亚洲跨种族黑人xxx| 亚洲激情中文字幕| 久久久精品在线观看| 精品一区精品二区| 中文字幕在线成人| 日韩av中文字幕在线免费观看| 国产精品爽黄69天堂a| 午夜精品久久久久久久久久久久久| 国产精品毛片a∨一区二区三区|国| 久久久久一本一区二区青青蜜月| 欧美日韩福利视频| 992tv成人免费影院| 精品国产一区二区三区久久狼5月| 91精品在线一区| 日韩av在线精品| 亚洲片av在线| 国产精品无av码在线观看| 久久精品久久精品亚洲人| 亚洲网站在线播放| 久久久久久12| 亚洲精品永久免费| 国产精品美女久久久久av超清| 国产精品大片wwwwww| 国内精品免费午夜毛片| 欧美精品激情blacked18| 91沈先生在线观看| 欧美三级xxx| 亚洲一二在线观看| 亚洲色图校园春色| 久久亚洲精品中文字幕冲田杏梨| 久久亚洲精品一区二区| 欧美激情一级欧美精品| 亚洲国产高清福利视频| 91情侣偷在线精品国产| 欧美二区乱c黑人| 国产欧美一区二区三区久久人妖| 日韩毛片在线观看|