>以對象為導向的代碼無處不在,WordPress也不例外。
WordPress的核心構建在用於控制所有內容的一系列對象/類上 在本教程中,我們將研究面向對象的設計,以及如何在為WordPress開發時如何在實際應用中使用這些設計,包括:
準確地了解哪種面向對象的設計是。
>>
鑰匙要點WordPress組中的面向對象的設計(OOD)相關的功能和信息中的信息,增強代碼組織和維護。
> OOD提供了諸如通過封裝,通過繼承的可伸縮性和模塊化的更好的組織提供好處,以便於代碼重複使用和管理。
>教程提供了在WordPress中創建自定義事件展示的一個實踐示例,證明了OOD原理的實現。 示例中的由於程序代碼運行良好,因此您可能想知道以對象為導向的方法開發的意義是什麼?
>雖然程序設計沒有“錯誤”,但以更面向對象的樣式開發有幾個好處。
>組織將所有代碼都放在一個地方可以幫助您保持井井有條,並協助其他可能會出現並需要了解您的系統的開發人員。
>
>沒有什麼比撿起一個項目並不得不四處尋找的函數和變量更糟糕的是,這些功能和變量用於創建網站的各種元素(由於未知原因而始終分佈在多個文件上) 。>
可伸縮性>
可以通過使用繼承擴展這些類來擴展或縮放這些類。繼承將使您基於另一個類創建一個類,該類可訪問其所有屬性和方法。>您可以擴展一類以執行其他功能,甚至可以覆蓋其方法和屬性以迎合這種情況。
>使用程序代碼,您要么需要重構代碼的一部分,要么完全創建新代碼以處理其他情況。模塊化
對象設計的目的是封裝所有功能,以將情況求解到類中。
>由於解決問題的所有代碼都在類內部,並且該類通常在其自己的PHP文件中,因此您可以將整個文件放在另一個位置,因此它本質上是模塊化的。>您可以復制和粘貼程序代碼,但通常情況不太井井有條,您可能必須瀏覽幾個文件以確保您擁有所需的功能。
在這種情況下,我們的客戶希望在其網站上可以創建和管理事件的位置。這些活動將用於促進即將到來的瑣事之夜,賓果遊戲和其他有趣的活動。
>第一步是分解所需的功能,以便我們可以計劃解決方案(在這裡進行良好的計劃將有助於我們以對象為導向的方法進行)。在我們的情況下,我們可以看到以下一組任務:我們可以創建一個插件,也可以編輯子主題以提供此功能。
因為我們希望所有內容都可以容易地管理和模塊化,所以讓我們從“孩子主題”內部設置文件夾結構開始。
在此目錄中,我們應該製作另一個文件夾,這次稱為event_showcase。在此文件夾中,我們將在此情況下放置所有適用的文件。 我們還需要一個JS和一個CSS文件夾。
>將功能組織到文件夾中將意味著您可以更輕鬆地查看哪些模塊 /功能您的主題工具。例如,您可能需要為主題實現另一組功能,您可以添加一個新文件夾,從邏輯上講,所有內容都整齊地組織了。
>讓我們為我們的示例創建文件,然後將它們移至正確的目錄>
> event_showcase_class.php
> event_showcase_admin_styles.css
>將文件加載到WordPress
中>打開您的孩子主題的函數。 php,並將以下代碼放在頂部或底部
>創建類概述
>我們的類文件稱為event_showcase_class.php將包含用於我們的事件系統的大多數功能;因此,最好繪製出我們需要進行這項工作需要的方法和屬性的基本概述。
><span>//Theme functions for child theme </span> <span>//load our event showcase class </span><span>$event_showcase = get_stylesheet_directory() . '/includes/event_showcase/event_showcase_class.php'; </span><span>include($event_showcase);</span>>將以下代碼複製到您的類文件中。
<span>//Theme functions for child theme </span> <span>//load our event showcase class </span><span>$event_showcase = get_stylesheet_directory() . '/includes/event_showcase/event_showcase_class.php'; </span><span>include($event_showcase);</span>
>讓我們通過方法和屬性運行,以便我們可以理解過程流程:
>我們在類的頂部聲明了一些將通過我們的方法引用的屬性。這些目的是使它們更容易重新置換此類並在將來更改其功能。
__ construct()
<span>/* </span><span> * Event Showcase </span><span> * Creates an 'event' content type to showcase upcoming functions and information </span><span> * Uses hooks and filters inside your theme to output relevant information </span><span> */ </span> <span>class event_showcase{ </span> <span>//variables </span> <span>private $directory = ''; </span> <span>private $singular_name = 'event'; </span> <span>private $plural_name = 'events'; </span> <span>private $content_type_name = 'event_showcase'; </span> <span>//magic function, called on creation </span> <span>public function __construct(){} </span> <span>//sets the directory (path) so that we can use this for our enqueuing </span> <span>public function set_directory_value(){} </span> <span>//check if we need to flush rewrite rules </span> <span>public function check_flush_rewrite_rules(){} </span> <span>//enqueue public scripts and styles </span> <span>public function enqueue_public_scripts_and_styles(){} </span> <span>//enqueue admin scripts and styles </span> <span>public function enqueue_admin_scripts_and_styles(){} </span> <span>//adding our new content type </span> <span>public function add_content_type(){} </span> <span>//adding meta box to save additional meta data for the content type </span> <span>public function add_meta_boxes_for_content_type(){} </span> <span>//displays the visual output of the meta box in admin (where we will save our meta data) </span> <span>public function display_function_for_content_type_meta_box($post){} </span> <span>//when saving the custom content type, save additional meta data </span> <span>public function save_custom_content_type($post_id){} </span> <span>//display additional meta information for the content type </span> <span>//@hooked using 'display_additional_meta_data' in theme </span> <span>function display_additional_meta_data(){} </span> <span>} </span> <span>//create new object </span> <span>$event_showcase = new event_showcase;</span>我們的__ -construct函數是一個魔術函數。這些功能是類的特殊PHP5功能,可以訪問執行特定操作的特定功能。
> __ -construct函數一旦初始化了類,因此它是第一個將觸發的函數。在這裡,我們正在添加所有掛鉤,過濾器和啟動邏輯。 使用以下代碼更新基本輪廓。
>您可能會認為add_action看起來與您以前看到的東西有點不同,並且您正確。
>
使用add_action和Add_filter在類中使用時,您必須在數組中提供第二個參數。數組的第一個值是$此變量(意味著類本身),第二個是將要使用的函數的名稱(用引號包裝)。<span>//variables </span><span>private $directory = ''; </span><span>private $singular_name = 'event'; </span><span>private $plural_name = 'events'; </span><span>private $content_type_name = 'event_showcase';</span>>
有關更多信息,請查看WordPress codex上的add_action函數的類腳註。
>由於我們將啟用CSS和JS,因此將文件目錄URL存儲到可以訪問的變量中是有意義的。我們的目錄結構是 /包括 /event_showcase,但是可以自定義以適合您的結構。
<span>//Theme functions for child theme </span> <span>//load our event showcase class </span><span>$event_showcase = get_stylesheet_directory() . '/includes/event_showcase/event_showcase_class.php'; </span><span>include($event_showcase);</span>check_flush_rewrite_rules()
重寫可確保您的內容類型轉換為漂亮的格式,但是,此重寫很昂貴,並且如果過度完成,則可以減慢您的網站。因為重寫可能會影響您的網站,因此通常僅在主題/插件激活或停用的情況下更改。
>>由於您可能不想手動更新固定鏈接,因此此功能要求WordPress自動進行,並且僅一次(添加了新的內容類型之後)。
>此功能將檢查是否需要通過主題選項刷新網站。如果需要沖洗,則將更新永久鏈接,然後將選項的值設置為false(因此它僅觸發一次,而不是每次加載頁面)。enqueue_public_scripts_and_styles()
此功能處理前端網站的腳本和样式的起點。
<span>/* </span><span> * Event Showcase </span><span> * Creates an 'event' content type to showcase upcoming functions and information </span><span> * Uses hooks and filters inside your theme to output relevant information </span><span> */ </span> <span>class event_showcase{ </span> <span>//variables </span> <span>private $directory = ''; </span> <span>private $singular_name = 'event'; </span> <span>private $plural_name = 'events'; </span> <span>private $content_type_name = 'event_showcase'; </span> <span>//magic function, called on creation </span> <span>public function __construct(){} </span> <span>//sets the directory (path) so that we can use this for our enqueuing </span> <span>public function set_directory_value(){} </span> <span>//check if we need to flush rewrite rules </span> <span>public function check_flush_rewrite_rules(){} </span> <span>//enqueue public scripts and styles </span> <span>public function enqueue_public_scripts_and_styles(){} </span> <span>//enqueue admin scripts and styles </span> <span>public function enqueue_admin_scripts_and_styles(){} </span> <span>//adding our new content type </span> <span>public function add_content_type(){} </span> <span>//adding meta box to save additional meta data for the content type </span> <span>public function add_meta_boxes_for_content_type(){} </span> <span>//displays the visual output of the meta box in admin (where we will save our meta data) </span> <span>public function display_function_for_content_type_meta_box($post){} </span> <span>//when saving the custom content type, save additional meta data </span> <span>public function save_custom_content_type($post_id){} </span> <span>//display additional meta information for the content type </span> <span>//@hooked using 'display_additional_meta_data' in theme </span> <span>function display_additional_meta_data(){} </span> <span>} </span> <span>//create new object </span> <span>$event_showcase = new event_showcase;</span>
加載資源時,我們還使用$目錄和$ content_type_name屬性。
enqueue_admin_scripts_and_styles()
此功能處理管理員後端網站的腳本和样式的起點。
>我們檢查我們是否在我們的內容類型的編輯屏幕或新屏幕上,並且僅在我們的情況下繼續進行(當我們不在正確的頁面上時不需要加載資源)。
<span>//variables </span><span>private $directory = ''; </span><span>private $singular_name = 'event'; </span><span>private $plural_name = 'events'; </span><span>private $content_type_name = 'event_showcase';</span>
>
go從上面的鏈接下載時間選擇器庫,並在您的目錄中包含相關的CSS和JS文件。
add_content_type()
我們在此功能中聲明我們的自定義內容類型。
>該函數使用$ singular_name,$ plural_name和$ content_type_nameproperties來使此新帖子類型的註冊輕鬆。
>>這樣的構造註冊函數,這意味著您只需提供幾片信息即可輕鬆更改和註冊帖子類型。
>有關註冊自定義內容類型的更詳細概述,請查看register_post_type函數的WordPress codex
<span>//Theme functions for child theme </span> <span>//load our event showcase class </span><span>$event_showcase = get_stylesheet_directory() . '/includes/event_showcase/event_showcase_class.php'; </span><span>include($event_showcase);</span>>添加了此步驟後,您應該看到一個新項目已添加到後端WordPress菜單中。
<span>/* </span><span> * Event Showcase </span><span> * Creates an 'event' content type to showcase upcoming functions and information </span><span> * Uses hooks and filters inside your theme to output relevant information </span><span> */ </span> <span>class event_showcase{ </span> <span>//variables </span> <span>private $directory = ''; </span> <span>private $singular_name = 'event'; </span> <span>private $plural_name = 'events'; </span> <span>private $content_type_name = 'event_showcase'; </span> <span>//magic function, called on creation </span> <span>public function __construct(){} </span> <span>//sets the directory (path) so that we can use this for our enqueuing </span> <span>public function set_directory_value(){} </span> <span>//check if we need to flush rewrite rules </span> <span>public function check_flush_rewrite_rules(){} </span> <span>//enqueue public scripts and styles </span> <span>public function enqueue_public_scripts_and_styles(){} </span> <span>//enqueue admin scripts and styles </span> <span>public function enqueue_admin_scripts_and_styles(){} </span> <span>//adding our new content type </span> <span>public function add_content_type(){} </span> <span>//adding meta box to save additional meta data for the content type </span> <span>public function add_meta_boxes_for_content_type(){} </span> <span>//displays the visual output of the meta box in admin (where we will save our meta data) </span> <span>public function display_function_for_content_type_meta_box($post){} </span> <span>//when saving the custom content type, save additional meta data </span> <span>public function save_custom_content_type($post_id){} </span> <span>//display additional meta information for the content type </span> <span>//@hooked using 'display_additional_meta_data' in theme </span> <span>function display_additional_meta_data(){} </span> <span>} </span> <span>//create new object </span> <span>$event_showcase = new event_showcase;</span>display_function_for_content_type_meta_box($ post)
在我們的示例中,我們正在收集有關將向最終用戶展示的事件的日期,時間和其他信息。
我們首先將所有附加的後元元數據收集到變量中,並顯示HTML表單的輸出。其中一些字段將觸發日期選擇器接口,而其他字段會觸發時間選擇器(由元素上使用的類確定)。
>此外,我們設置了一個nonce字段,以便我們可以在此頁面上驗證保存。>
>完成此步驟後,您應該看到新的空元框已轉換,現在可以保留我們所有的新信息。
<span>//variables </span><span>private $directory = ''; </span><span>private $singular_name = 'event'; </span><span>private $plural_name = 'events'; </span><span>private $content_type_name = 'event_showcase';</span>
> save_custom_content_type($ post_id)
>我們將所有值收集到變量中,並使用Sanitize_text_field函數對它們進行消毒。之後,我們調用update_post_meta函數以保存我們的數據。
此功能顯示我們新內容類型的單個帖子的保存元信息(單個事件)。
> >您可以調用do_action('display_content_type_meta');從主題內的任何地方(只要您在此內容類型的單個帖子上),它將顯示元信息。 >我正在使用二十三十三個父母主題,所以我正在掛接我的顯示器主題的content.php。
之後
其他文件,CSS和JS
您可以看到其他字幕,日期,時間和票務數據。
從這裡到哪裡? >現在您已經看到了一個實用的對象設計的實踐示例,以及增強開發的容易,您可以運用這些技能並構建更好的主題和插件。 希望本文將幫助您計劃開發,並查看面向對象的方法如何節省您的時間和精力。 > WordPress中的面向對象的編程(OOP)是什麼?這些對像用於相互交互以設計應用程序和軟件。 WordPress中的OOP是有益的,因為它為程序提供了一個清晰的模塊化結構,這使其適合定義隱藏實現詳細信息並且單元具有明確定義的接口的抽像數據類型。<span>//magic function, called on creation
</span><span>public function __construct(){
</span>
<span>$this->set_directory_value(); //set the directory url on creation
</span> <span>add_action('init', array($this,'add_content_type')); //add content type
</span> <span>add_action('init', array($this,'check_flush_rewrite_rules')); //flush re-write rules for permalinks (because of content type)
</span> <span>add_action('add_meta_boxes', array($this,'add_meta_boxes_for_content_type')); //add meta boxes
</span> <span>add_action('wp_enqueue_scripts', array($this,'enqueue_public_scripts_and_styles')); //enqueue public facing elements
</span> <span>add_action('admin_enqueue_scripts', array($this, 'enqueue_admin_scripts_and_styles')); //enqueues admin elements
</span> <span>add_action('save_post_' . $this->content_type_name, array($this,'save_custom_content_type')); //handles saving of content type meta info
</span> <span>add_action('display_content_type_meta', array($this,'display_additional_meta_data')); //displays the saved content type meta info
</span><span>}</span>
這個操作的第二個值稱為display_additional_meta_data,與此功能相對應。這意味著任何時候有人調用do_action('display_content_type_meta');它將調用此函數並顯示新的帖子元信息。 <span>//Theme functions for child theme
</span>
<span>//load our event showcase class
</span><span>$event_showcase = get_stylesheet_directory() . '/includes/event_showcase/event_showcase_class.php';
</span><span>include($event_showcase);</span>
現在,大部分功能已經完成,讓我們將其交換到我們的CSS和JS文件中以快速添加一些樣式和交互性。 >
> event_showcase_admin_styles.css > event_showcase_public_styles.css
<span>/*
</span><span> * Event Showcase
</span><span> * Creates an 'event' content type to showcase upcoming functions and information
</span><span> * Uses hooks and filters inside your theme to output relevant information
</span><span> */
</span>
<span>class event_showcase{
</span>
<span>//variables
</span> <span>private $directory = '';
</span> <span>private $singular_name = 'event';
</span> <span>private $plural_name = 'events';
</span> <span>private $content_type_name = 'event_showcase';
</span>
<span>//magic function, called on creation
</span> <span>public function __construct(){}
</span> <span>//sets the directory (path) so that we can use this for our enqueuing
</span> <span>public function set_directory_value(){}
</span> <span>//check if we need to flush rewrite rules
</span> <span>public function check_flush_rewrite_rules(){}
</span> <span>//enqueue public scripts and styles
</span> <span>public function enqueue_public_scripts_and_styles(){}
</span> <span>//enqueue admin scripts and styles
</span> <span>public function enqueue_admin_scripts_and_styles(){}
</span> <span>//adding our new content type
</span> <span>public function add_content_type(){}
</span> <span>//adding meta box to save additional meta data for the content type
</span> <span>public function add_meta_boxes_for_content_type(){}
</span> <span>//displays the visual output of the meta box in admin (where we will save our meta data)
</span> <span>public function display_function_for_content_type_meta_box($post){}
</span> <span>//when saving the custom content type, save additional meta data
</span> <span>public function save_custom_content_type($post_id){}
</span> <span>//display additional meta information for the content type
</span> <span>//@hooked using 'display_additional_meta_data' in theme
</span> <span>function display_additional_meta_data(){}
</span> <span>}
</span>
<span>//create new object
</span> <span>$event_showcase = new event_showcase;</span>
> event_showcase_admin_scripts.js
<span>//variables
</span><span>private $directory = '';
</span><span>private $singular_name = 'event';
</span><span>private $plural_name = 'events';
</span><span>private $content_type_name = 'event_showcase';</span>
>在操作中完成的功能!
>
<span>//magic function, called on creation
</span><span>public function __construct(){
</span>
<span>$this->set_directory_value(); //set the directory url on creation
</span> <span>add_action('init', array($this,'add_content_type')); //add content type
</span> <span>add_action('init', array($this,'check_flush_rewrite_rules')); //flush re-write rules for permalinks (because of content type)
</span> <span>add_action('add_meta_boxes', array($this,'add_meta_boxes_for_content_type')); //add meta boxes
</span> <span>add_action('wp_enqueue_scripts', array($this,'enqueue_public_scripts_and_styles')); //enqueue public facing elements
</span> <span>add_action('admin_enqueue_scripts', array($this, 'enqueue_admin_scripts_and_styles')); //enqueues admin elements
</span> <span>add_action('save_post_' . $this->content_type_name, array($this,'save_custom_content_type')); //handles saving of content type meta info
</span> <span>add_action('display_content_type_meta', array($this,'display_additional_meta_data')); //displays the saved content type meta info
</span><span>}</span>
>所有內容都拼湊在一起時,您應該能夠使用其他元數據創建一個新的“事件”。當您查看活動時,您應該在下面看到我的樣本>
>
>您可能想從我的GitHub頁面下載此示例的來源,然後更改它適合即將到來的項目或擴展其以提供其他功能。
>面向對象的編程與WordPress中的程序編程有何不同?
>
>如何在WordPress中的盒子中刪除OBJ?
>
>我如何學習以wordpress為導向的對象編程? WordPress面向對象的編程。這包括在線教程,課程和書籍。您還可以通過檢查WordPress核心代碼來學習,因為它是使用OOP原理編寫的。 是wordpress開發所需的面向對象的編程嗎?> > > > > >
並不是嚴格地面向對象的編程。強烈建議使用WordPress開發。使用OOP原則可以幫助您的代碼更可讀,可重複使用且易於維護。它還可以幫助您更好地理解WordPress核心代碼。以上是WordPress以對象為導向的開發的詳細內容。更多資訊請關注PHP中文網其他相關文章!