wordpress插件開發流程梳理-二

開發插件的最佳實踐

避免命名衝突

當您的插件對變量,函數或類使用相同的名稱作爲另一個插件時,會發生命名衝突。

幸運的是,您可以使用以下方法避免命名衝突。

程序性

默認情況下,所有變量,函數和類都在全局命名空間中定義,這意味着您的插件可以覆蓋由另一個插件設置的變量,函數和類,反之亦然。在函數或類中定義的變量不受此影響。

前綴一切

所有變量,函數和類都應以唯一標識符爲前綴。前綴可防止其他插件覆蓋您的變量並意外調用您的函數和類。它也會阻止你做同樣的事情。

檢查現有實現

PHP提供了許多函數來驗證變量,函數,類和常量的存在。如果實體存在,所有這些都將返回true。

  • 變量: isset() (包括數組,對象等)
  • 函數: function_exists()
  • 類: class_exists()
  • 常量:defined()

OOP面向對象

解決命名衝突問題的一種更簡單的方法是使用類來獲取插件的代碼。

您仍然需要檢查是否已經使用了您想要的類的名稱,但其餘的將由PHP處理。

示例:

<?php
if ( !class_exists( 'WPOrg_Plugin' ) ) {
    class WPOrg_Plugin
    {
        public static function init() {
            register_setting( 'wporg_settings', 'wporg_option_foo' );
        }
 
        public static function get_foo() {
            return get_option( 'wporg_option_foo' );
        }
    }
 
    WPOrg_Plugin::init();
    WPOrg_Plugin::get_foo();
}

目錄結構:

/plugin-name
     plugin-name.php //插件主文件,必須和文件夾名保持一致
     uninstall.php //卸載插件時自動運行的腳本
     /languages //國際化語言包
     /includes //其他功能腳本
     /admin
          /js
          /css
          /images
     /public
          /js
          /css
          /images

條件加載

將管理代碼與公共代碼分開是有幫助的。使用條件is_admin()。

示例:

<?php
if ( is_admin() ) {
    // we are in admin mode
    require_once( dirname( __FILE__ ) . '/admin/plugin-name-admin.php' );
}

文件結構參考

參考模板

對於您編寫的每個新插件,您可能希望從樣板開始,而不是從頭開始。使用樣板的一個優點是在您自己的插件之間保持一致。如果使用他們熟悉的樣板,使用模板也可以讓其他人更容易爲您的代碼做出貢獻。

這些也可作爲不同但可比較的架構的進一步示例。

注:本篇,完全是由官方文檔翻譯而來,描述了一個好的插件的最佳實踐。該用什麼樣的目錄結構,什麼時候該做一些權限的判定,甚至Github上提供了一些可參考的模板,以防我們的代碼寫出來像坨屎一樣。我也希望自己寫出來的插件,且不說功能如何,最起碼不被噴This is shit .所以你看到,我們現在花一些功夫來從頭梳理,流程。真正開發流程中遇到的問題,我會在後邊的時候提到。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章