wordpress外掛程式製作

來源:互聯網
上載者:User
<?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_pluginmy_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   Dashboard4   Separator5   Posts10  Media15  Links20  Pages25  Comments59  Separator60  Appearance65  Plugins70  Users75  Tools80  Settings99  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&amp;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'];?>

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.