WordPress插件開發實例教程 - 版權插件

說明:本教程僅限學習,高手請繞道php

開發程序:WordPress 3.9-RC1html

使用主題:Twenty Fourteen數據庫

在開始以前,須要注意三件事情瀏覽器

I、給插件取一個個性化的名字,越個性化越好,以防和其餘插件重名衝突。編輯器

II、代碼裏面,必定要包含註釋,不爲本身,也要爲想修改你代碼的別人想一想。wordpress

III、儘可能用最新版的 WordPress 進行開發和測試。函數

插件名稱和插件結構post

通常來講,都是在 wp-content\plugins 目錄下創建一個文件夾,文件夾名就是插件的名稱,咱們插件名字爲"copyright_plugin",文件結構以下。學習

 

\wp-content\plugins\copyright_plugin下有copyright_plugin.php和readme.txt測試

這裏的 readme.txt 文件中包含了一些插件的介紹,使用說明等信息,主要是提交到 WordPress 官方網站時候用到的,能夠參考他們給的模板 http://wordpress.org/extend/plugins/about/readme.txt,另外還有插件截圖預覽的功能,須要另外添加圖片,可是咱們如今是練習,不須要提交到官網,因此暫時先不涉及這些。

插件的核心

總的來講,插件的核心是兩個 function,用來添加 Hooks(中文譯爲鉤子)

add_action ($hookname, $callbackfunction)
add_filter ($hookname,$callbackfunction)

這兩個方法至關重要,幾乎全部的插件都要用到他們。

Actions,我理解就是 wordpress 核心代碼預留的一些特殊的切入點,或者說是在執行一些特定事件時候發生,例如文章發佈時,或者訪客留言時觸發。
Filters,應該就是 wordpress 執行時,對數據傳輸過程的一種過濾機制,例如當文章保存到數據庫的過程,或者文章從事數據庫中取出,展示到瀏覽器中的這個過程。

咱們今天要製做的插件,應該是用 Filters,由於咱們要在文章顯示在瀏覽器以前,在最後面加上一段字符竄,用來顯示版權信息,後面添加菜單項的時候,也要用到 Actions。

插件概要信息

用文本編輯器打開 copyright-plugin.php 文件,輸入以下信息:

<?php  
/*
Plugin Name: Copyright plugin
Plugin URI: http://www.xxxx.com/plugins/
Description: 此插件將在文章正文最下面,顯示一行版權信息
Version: 1.0.0
Author: xcxc
Author URI: http://www.xxxx.com/
License: GPL
*/
?> 

保存好文件,而後登陸 WordPress 後臺,打開插件菜單,應該就能夠看到這個插件,已經顯示在插件列表裏面了,而且能夠啓用這個插件試試,不過沒有任何效果,由於到目前爲止,這個插件尚未實現任何功能。

爲插件實現功能

修改copyright_plugin.php

<?php  
/*
Plugin Name: Copyright plugin
Plugin URI: http://www.xxxx.com/plugins/
Description: 此插件將在文章正文最下面,顯示一行版權信息
Version: 1.0.0
Author: xcxc
Author URI: http://www.xxxx.com/
License: GPL
*/
 
/* 此插件將在文章正文最下面,顯示一行版權信息 */ 
function display_copyright() {  
    return "<p style='color:red'>本站點全部文章均爲原創,轉載請註明出處!</p>";  
}  
?> 

保存好這個文件,而後打開正在用的主題文件夾,打開index.php 文件夾,找到 get_template_part( 'content', get_post_format() ); 並在下面添加以下代碼

if(function_exists('display_copyright')) {  
    echo display_copyright();  
}  

function_exists 是判斷 display_copyright 函數是否存在,由於當插件停用的時候,主題代碼裏面是找不到這個函數的,因此要判斷一下,防止出錯。

而後在 wordpress 後臺啓用該插件,再打開首頁看看效果吧!

至此,這段代碼,應該能夠勉強算是一個插件了。之因此說勉強,是由於這個插件存在一個問題,須要手工去修改主題代碼,若是用戶換了主題的話,須要在新主題裏面再次修改代碼,這個很差。

改良插件

還記得咱們前面說過的 Hooks (鉤子)嗎,咱們要開始用 Filter 鉤子了!

代碼修改copyright_plugin.php以下:

<?php  
/*
Plugin Name: Copyright plugin
Plugin URI: http://www.xxxx.com/plugins/
Description: 此插件將在文章正文最下面,顯示一行版權信息
Version: 1.0.0
Author: xcxc
Author URI: http://www.xxxx.com/
License: GPL
*/
add_filter( 'the_content',  'display_copyright' );  
 
/* 這個函數在日誌正文結尾處添加一段版權信息,而且只在 首頁 頁面才添加 */ 
function display_copyright( $content ) {  
    if( is_home() )  
        $content = $content . "<p style='color:red'>本站點全部文章均爲原創,轉載請指明出處!</p>";  
 
    return $content;  
}  
?> 

參看以上代碼,其中 the_content 是鉤子的名字,display_copyright 是回調函數名稱。這樣一來,只要啓用插件就能夠實現功能,無需去修改主題了,請把剛纔在index.php 文件中添加的代碼刪掉,而後啓用插件,看看效果吧,顯示效果應該是同樣的,不管怎麼換主題,仍是會自動顯示版權信息。

is_home是判斷是否是主頁

更進一步

至此一個真正的插件算是完成了。可是此插件將版權信息直接寫在代碼裏,若是用戶想自定義版權信息的話,須要修改插件的源代碼,仍然不方便,因此此插件仍需改進。其實,咱們能夠在 WordPress 後臺中爲插件單獨添加一個菜單和頁面,用戶能夠在這裏來自定義設置設置版權信息,信息能夠保存在數據庫裏面。

先附上完整代碼,後面會作說明

<?php  
/*
Plugin Name: Copyright plugin
Plugin URI: http://www.xxxx.com/plugins/
Description: 此插件將在文章正文最下面,顯示一行版權信息
Version: 1.0.0
Author: xcxc
Author URI: http://www.xxxx.com/
License: GPL
*/

/* 註冊激活插件時要調用的函數 */ 
register_activation_hook( __FILE__, 'display_copyright_install');   

/* 註冊停用插件時要調用的函數 */ 
register_deactivation_hook( __FILE__, 'display_copyright_remove' );  

function display_copyright_install() {  
    /* 在數據庫的 wp_options 表中添加一條記錄,第二個參數爲默認值 */ 
    add_option("display_copyright_text", "<p style='color:red'>本站點全部文章均爲原創,轉載請註明出處!</p>", '', 'yes');  
}

function display_copyright_remove() {  
    /* 刪除 wp_options 表中的對應記錄 */ 
    delete_option('display_copyright_text');  
}

if( is_admin() ) {
    /*  利用 admin_menu 鉤子,添加菜單 */
    add_action('admin_menu', 'display_copyright_menu');
}

function display_copyright_menu() {
    /* add_options_page( $page_title, $menu_title, $capability, $menu_slug, $function);  */
    /* 頁名稱,菜單名稱,訪問級別,菜單別名,點擊該菜單時的回調函數(用以顯示設置頁面) */
    add_options_page('Set Copyright', 'Copyright Menu', 'administrator','display_copyright', 'display_copyright_html_page');
}

function display_copyright_html_page() {
    ?>
    <div>  
        <h2>Set Copyright</h2>  
        <form method="post" action="options.php">  
            <?php /* 下面這行代碼用來保存表單中內容到數據庫 */ ?>  
            <?php wp_nonce_field('update-options'); ?>  
 
            <p>  
                <textarea  
                    name="display_copyright_text" 
                    id="display_copyright_text" 
                    cols="40" 
                    rows="6"><?php echo get_option('display_copyright_text'); ?></textarea>  
            </p>  
 
            <p>  
                <input type="hidden" name="action" value="update" />  
                <input type="hidden" name="page_options" value="display_copyright_text" />  
 
                <input type="submit" value="Save" class="button-primary" />  
            </p>  
        </form>  
    </div>  
<?php  
}  

add_filter( 'the_content',  'display_copyright' );  
 
/* 這個函數在日誌正文結尾處添加一段版權信息,而且只在 首頁 頁面才添加 */ 
function display_copyright( $content ) {  
    if( is_home() )  
        $content = $content . get_option('display_copyright_text'); 
 
    return $content;  
}  
?> 

說明:

如下代碼本身要是在啓用插件時和停用插件時調用,註釋中已經寫得很詳細了。

/* 註冊激活插件時要調用的函數 */ 
register_activation_hook( __FILE__, 'display_copyright_install');   

/* 註冊停用插件時要調用的函數 */ 
register_deactivation_hook( __FILE__, 'display_copyright_remove' );  

function display_copyright_install() {  
    /* 在數據庫的 wp_options 表中添加一條記錄,第二個參數爲默認值 */ 
    add_option("display_copyright_text", "<p style='color:red'>本站點全部文章均爲原創,轉載請註明出處!</p>", '', 'yes');  
}

function display_copyright_remove() {  
    /* 刪除 wp_options 表中的對應記錄 */ 
    delete_option('display_copyright_text');  
}

 

添加菜單和頁面的代碼以下:

if( is_admin() ) {
    /*  利用 admin_menu 鉤子,添加菜單 */
    add_action('admin_menu', 'display_copyright_menu');
}

function display_copyright_menu() {
    /* add_options_page( $page_title, $menu_title, $capability, $menu_slug, $function);  */
    /* 頁名稱,菜單名稱,訪問級別,菜單別名,點擊該菜單時的回調函數(用以顯示設置頁面) */
    add_options_page('Set Copyright', 'Copyright Menu', 'administrator','display_copyright', 'display_copyright_html_page');
}

至此,已經能夠在後臺看到菜單項了,可是點擊的話,還會出錯,由於尚未添加對應的頁面(如何自定義添加後臺菜單位置

下面開始添加頁面,主要代碼以下:

function display_copyright_html_page() {
    ?>
    <div>  
        <h2>Set Copyright</h2>  
        <form method="post" action="options.php">  
            <?php /* 下面這行代碼用來保存表單中內容到數據庫 */ ?>  
            <?php wp_nonce_field('update-options'); ?>  
 
            <p>  
                <textarea  
                    name="display_copyright_text" 
                    id="display_copyright_text" 
                    cols="40" 
                    rows="6"><?php echo get_option('display_copyright_text'); ?></textarea>  
            </p>  
 
            <p>  
                <input type="hidden" name="action" value="update" />  
                <input type="hidden" name="page_options" value="display_copyright_text" />  
 
                <input type="submit" value="Save" class="button-primary" />  
            </p>  
        </form>  
    </div>  
<?php  
}  

如今再去點擊剛纔新加的菜單,能夠顯示出來一個頁面了,咱們能夠在這裏設置版權信息文本。

另外還有以下代碼要修改

/* 這個函數在日誌正文結尾處添加一段版權信息,而且只在 首頁 頁面才添加 */ 
function display_copyright( $content ) {  
    if( is_home() )  
        $content = $content . get_option('display_copyright_text'); 
 
    return $content;  
}  

將原來的靜態化文本,改爲動態的,之因此要這麼改,是由於咱們已經將數據存到數據庫裏面了,這裏要從數據庫裏面取出數據。

相關文章
相關標籤/搜索