wordpress插件制作
生活随笔
收集整理的這篇文章主要介紹了
wordpress插件制作
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
<?php
/*
本文章是在網上搜尋其他關于wordpress創建插件文章并親自實踐總結而來的代碼。
參考文章網址有
http://www.ashuwp.com/courses/level/optionpage 很好的教程,簡單易懂
http://www.akasuna.com/2010/10/20/how-to-develop-a-plug-in/ 也是一篇不錯的文章在根目錄下 wp-content/plugins 新建存放新建插件文件夾 my_wp_plugin
my_wp_plugin 中新建 my_wp_plugin.php 文件
內容:
*//*
Plugin Name: 插件名稱
Plugin URI: 插件介紹的網址,沒有就填博客網址吧
Description: 這里填插件的簡短介紹
Version: 版本號
Author: 作者名
Author URI: 作者的網址
*//*
以上插件信息在my_wp_plugin.php中要用注釋括起來
再在my_wp_plugin.php中新建方法
*/function my_wp_plugins_first_fun($content) {//if (is_single ())//只在 single 頁才執行$content .= "<p style='color:red'>這是我測試的第一個wp插件!</p>";return $content;
}/*
到使用的主題文件中的任意頁,在想要顯示的位置輸入(這里在content-page.php頁 <?php the_content(); ?> 代碼下面添加)
*/if(function_exists('my_wp_plugins_first_fun')) {//判斷函數是否存在echo my_wp_plugins_first_fun("測試用-");//可以直接使用插件里的方法
}/*
訪問網站剛才修改的頁即可看到想要顯示的結果
至此,這段代碼,應該可以勉強算是一個插件了
但是插件存在一個問題,需要手工去修改主題代碼,如果用戶換了主題的話,需要在新主題里面再次修改代碼,這個不好。
這時要開始用 Filter 鉤子了!總的來說,插件的核心是兩個 function,用來添加 Hooks(中文譯為鉤子)
add_action ($hookname, $callbackfunction)
add_filter ($hookname,$callbackfunction)這兩個方法相當重要,幾乎所有的插件都要用到他們。Actions,目前理解就是 wordpress 核心代碼預留的一些特殊的切入點,或者說是在執行一些特定事件時候發生,例如文章發布時,或者訪客留言時觸發。
Filters,應該就是 wordpress 執行時,對數據傳輸過程的一種過濾機制,例如當文章保存到數據庫的過程,或者文章從事數據庫中取出,展現到瀏覽器中的這個過程。今天要制作的插件,應該是用 Filters,因為要在文章顯示在瀏覽器之前,在最后面加上一段字符竄,用來顯示版權信息,后面添加菜單項的時候,也要用到 Actions。改良插件
再在my_wp_plugin.php中添加如下代碼
*/
add_filter ( 'the_content', 'my_wp_plugins_first_fun' );/*
the_content 是鉤子的名字,my_wp_plugins_first_fun 是回調函數名稱。
這樣一來,只要啟用插件就可以實現功能,無需去修改主題了
可以把剛才主題文件中添加的代碼刪掉,然后啟用插件,再查看該頁,顯示效果應該是一樣的,無論怎么換主題,還是會自動顯示my_wp_plugins_first_fun方法里的信息。
至此一個真正的插件算是完成了,但是此插件將版權信息直接寫在代碼里,可以在 WordPress 后臺中為插件單獨添加一個菜單和頁面,信息可以保存在數據庫里面。
繼續在my_wp_plugin.php中添加如下代碼
*/register_activation_hook(__FILE__,'my_wp_plugins_install');/* 注冊激活插件時要調用的函數 */register_deactivation_hook( __FILE__, 'my_wp_plugins_remove' );/* 注冊停用插件時要調用的函數 */function my_wp_plugins_install() {/* 在數據庫的 wp_options 表中添加一條記錄,第二個參數為存儲的值 */add_option("my_wp_plugins_text" , "<p style='color:red'>這是我測試的第一個wp插件!</p>" , '', 'yes');
}
function my_wp_plugins_remove() {delete_option('my_wp_plugins_text');/* 刪除 wp_options 表中的對應記錄 */
}/*
add_option( $option, $value = '', $deprecated = '', $autoload = 'yes' )
string $option 必填,要存到wp_options表option_name字段的值,相當于鍵名
mixed $value 選填,要存到wp_options表option_value字段的值,相當于鍵值
mixed $deprecated 選填,不再使用
bool $autoload 選填,預設為啟用。要存到wp_options表autoload字段的值,WordPress的啟動時是否加載選項。接著在my_wp_plugin.php中添加如下代碼
*/if( is_admin() ) {//判斷是否在 WordPress 后臺add_action('admin_menu', 'my_wp_plugins_menu');//添加菜單
}function my_wp_plugins_menu() {add_options_page('信息設置頁面', '設置菜單標題', 'administrator','my_wp_plugins', 'plugins_option_menu');//在設置欄下添加菜單,與add_submenu_page添加效果相同,只是wordpress提供的方便形式add_theme_page( 'title標題' , '外觀菜單標題' , 'administrator' , 'my_wp_plugins_theme' , 'plugins_theme_menu');//在外觀欄下添加菜單add_menu_page( 'title標題' , '頂級菜單標題' , 'administrator' , 'my_wp_plugins_top' , 'plugins_top_menu' , '' , 6 );//添加頂級菜單add_submenu_page( 'my_wp_plugins_top' , 'title標題' , '子菜單標題' , 'administrator' , 'my_wp_plugins_child' , 'plugins_child_menu' );//添加子菜單
}/*
add_options_page( $page_title, $menu_title, $capability, $menu_slug, $function);
$page_title 頁面的title信息
$menu_title 菜單名稱
$capability 訪問這個頁面需要的權限
$menu_slug 菜單別名 需要獨一無二
$function 點擊該菜單時的回調函數(用以顯示設置頁面)add_theme_page( $page_title, $menu_title, $capability, $menu_slug, $function);
$page_title 頁面的title信息
$menu_title 菜單名稱
$capability 訪問這個頁面需要的權限
$menu_slug 菜單別名 需要獨一無二
$function 點擊該菜單時的回調函數(用以顯示設置頁面)add_menu_page( $page_title, $menu_title, $capability, $menu_slug, $function, $icon_url, $position );
$page_title 頁面的title信息
$menu_title 菜單名稱
$capability 訪問這個頁面需要的權限
$menu_slug 菜單別名 需要獨一無二
$function 點擊該菜單時的回調函數(用以顯示設置頁面)
$icon_url 菜單圖標url地址
$position 此菜單項在菜單中的位置,警告:如果兩個菜單項的位置屬性相同,其中一個可能要被覆蓋
上面函數的position參數,默認的菜單項位置屬性如下:
2 Dashboard
4 Separator
5 Posts
10 Media
15 Links
20 Pages
25 Comments
59 Separator
60 Appearance
65 Plugins
70 Users
75 Tools
80 Settings
99 Separatoradd_submenu_page( $parent_slug, $page_title, $menu_title, $capability, $menu_slug, $function );
$parent_slug 父級菜單項的別名
$page_title 頁面的title信息
$menu_title 菜單名稱
$capability 訪問這個頁面需要的權限
$menu_slug 菜單別名 需要獨一無二
$function 點擊該菜單時的回調函數(用以顯示設置頁面)wordpress對于function參數,這個參數一般是函數名,要調用類的方法,使用 array(類名,函數名) 這樣的形式調用。
如果這個參數為空的話,menu_slug參數可以是一個文件路徑。basename(__FILE__) 返回當前文件完整名稱至此,已經可以在后臺看到菜單項了,但是點擊的話,還會出錯,因為還沒有添加回調函數指向頁面
繼續在my_wp_plugin.php中添加如下代碼
*/
function plugins_option_menu() {
//如果要存儲wp_options表值,以下寫法固定
?>
<div><h2>信息設置</h2><form method="post" action="options.php"><?php wp_nonce_field('update-options'); //用來輸出提交向options.php頁時的驗證數據?><p><textarea name="my_wp_plugins_text"><?php echo get_option('my_wp_plugins_text'); ?></textarea></p><p><textarea name="my_wp_plugins_text2"><?php echo get_option('my_wp_plugins_text2'); ?></textarea></p><p><input type="hidden" name="action" value="update" /><!-- 要存的form控件名 = 此處的value值 = wp_options表option_name字段值。多個form控件名在value值中用 , 分開--><input type="hidden" name="page_options" value="my_wp_plugins_text,my_wp_plugins_text2" /><input type="submit" name="submit" value="保存設置" class="button-primary" /></p></form>
</div>
<?php
}//要啟用wordpress自帶上傳需要引用wordpress自帶的JS和CSS
//加載上傳圖片的js(wp自帶)
wp_enqueue_script('thickbox');
//加載css(wp自帶)
wp_enqueue_style('thickbox');
//加載jquery,get_bloginfo( 'stylesheet_directory' ) 返回當前網站使用主題所在文件夾完整路徑
wp_enqueue_script('my-upload', get_bloginfo( 'stylesheet_directory' ) . '/js/jquery-1.8.2.js');function plugins_theme_menu(){
?>
<form method="post" enctype="multipart/form-data" action=""><div><h2>wordpress自帶上傳</h2><p><label><input type="text" name="img_url_txt" id="img_url_txt" value="<?php echo get_option('img_url'); ?>" size="80"/><input type="button" name="upload_but" id="upload_but" value="上傳"/></label></p><p><input type="submit" name="submit" value="保存設置" /></p></div>
</form>
<script type="text/javascript">
$("#upload_but").click(function(){//點擊按鈕,打開wordpress自帶上傳工具tb_show('', 'media-upload.php?type=image&TB_iframe=true');
})window.send_to_editor = function(html) {img_url = $('img',html).attr('src');//將上傳后的圖片完整路徑賦給text框以保存到數據庫中$("#img_url_txt").val(img_url);tb_remove();
}
</script>
<?php
}function plugins_top_menu(){echo '<h1>這是頂級菜單頁面</h1>';
}function plugins_child_menu() {echo '<h3>這是子菜單頁面</h3>';}
/*
也可以使用update_option函數來自己手動更新wp_options表數據。
此時提交表單中不需要把提交地址指向wp-admin/options.php(這里假使地址指向當前頁),就不需要寫wp_nonce_field來驗證
也不需要寫action,page_options兩個隱藏控件
*/
if($_POST['submit']){if($_POST['my_wp_plugins_text'])update_option( "my_wp_plugins_text", $_POST['my_wp_plugins_text'] );//update_option( "my_wp_plugins_text", array('ok'=>'yes!') );也可存數組,同樣取出時取出的也是數組if($_POST['my_wp_plugins_text2'])update_option( "my_wp_plugins_text2", $_POST['my_wp_plugins_text2'] );if($_POST['img_url_txt'])update_option( "img_url", $_POST['img_url_txt'] );
}
/*
update_option( $option, $newvalue )
$option 要更新wp_options表option_name字段的值,相當于鍵名
$newvalue 要更新wp_options表option_value字段的值,相當于鍵值原my_wp_plugins_first_fun函數中 $content 變量值即可改成 $content .= get_option('my_wp_plugins_text'); 從數據庫中獲取值插件中也可直接使用PHP的數據庫操作函數
*/
$que_str = mysql_query("select * from wp_options limit 1");
$row_op = mysql_fetch_array($que_str);
echo $row_op['option_name'];
?>
?
轉載于:https://www.cnblogs.com/dreamhome/archive/2013/03/30/2990736.html
總結
以上是生活随笔為你收集整理的wordpress插件制作的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: ANT-build.xml文件详解
- 下一篇: 黑马程序员_集合学习1