# 10. Xây dựng WordPress plugin với lập trình hướng đối tượng

Đa phần khi bạn mới bắt tay vào tìm hiểu và phát triển WordPress hoặc điển hình là xây dựng plugin, thường sử dụng phương pháp lập trình hướng thủ tục php (function) để xử lý các chức năng.  Nhưng bất cập bạn sẽ gặp phải về sau là khó phát triển và nâng cấp plugin,nếu bạn đã từng học [Lập trình php](http://vdevpro.com/chuong-trinh-php-dau-tien/) thì cũng hiểu được những yếu điểm của phương pháp lập trình truyền thống.

Do đó bài **Xây dựng WordPress plugin với lập trình hướng đối tượng** ra đời sẽ giúp cho bạn có cái nhìn tổng quát hơn về một nền tảng xây dựng plugin có chiều sâu và độ mở rộng tốt. Bài này sẽ liên quan tới bài [**Giới thiệu WordPress Action Hook**](http://vdevpro.com/gioi-thieu-wordpress-action-hook/), nếu bạn chưa xem hoặc quên bài thì có thể xem lại để tiếp thu bài này tốt hơn.

Lập trình hướng đối tượng (OOP) là một khái niệm rất cần thiết trong quá trình phát triển WordPress chuyên nghiệp, vì nó có quá nhiều vấn đề nên tôi không thể trình bày hết trong bài được, bạn có thể google thêm hoặc chờ đợi tác giả Aki triển khai loạt bài về nó.

Nội dung bài bao gồm:

·        Các Action Hook thông dụng

·        Tạo mới  WordPress Action Hook & truyền tham số

·        Sử dụng class với WordPress Action Hook

1/ Các WordPress Action Hook thông dụng

Danh sách các **Action Hook** thông dụng:

·        **plugin\_loaded():** Thực thi việc load plugin khi bắt đầu tải trang.

·        **init()**: Thực thi hành động khi WordPress tải xong một trang nhưng trước khi các thông số trong phần head được gửi đi.

·        **admin\_menu()**: Thực thi hành động thêm vào trang quản trị một menu mới.

·        **wp\_head()**: Thực thi các hành động load và xử lý các file css , js khi tải trang.

·        **delete\_post()**: Thực thi hành động khi bạn xóa bài viết.

Ngoài ra còn khá là nhiều Action Hook được sử dụng thường xuyên, nhưng tôi không thể trình bày hết được, ở bài khác tôi sẽ hướng dẫn bạn nghiên cứu luồng xử lý dữ liệu và thứ tự chạy của **Action Hook** trong hệ thống WordPress.

1/ Tạo mới WordPress Action Hook & truyền tham số

Do nhu cầu hiển thị chức năng của website, bạn hoàn toàn có thể tạo ra các Action Hook theo ý của bạn , các action này thường được nhúng vào các themes.

Để tạo mới Action Hook thì WordPress cung cấp cho bạn hai hàm **add\_action()** và **do\_action()**

**Đoạn code xử lý:**

| <p>1</p><p>2</p><p>3</p><p>4</p><p>5</p><p>6</p><p>7</p><p>8</p><p>9</p><p>10</p><p>11</p><p>12</p><p>13</p><p>14</p><p>15</p><p>16</p><p>17</p><p>18</p><p>19</p><p>20</p><p>21</p><p>22</p> | <p>\<?php</p><p>/\*\*</p><p> \* @package  Demo Hook Action By Lionel</p><p> \* @version 0.1</p><p> */</p><p>/*</p><p>Plugin Name: Demo Hook Action</p><p>Plugin URI: <http://laptrinhweb.org></p><p>Description: Demo về cách sử dụng Hook Action.</p><p>Author: Lionel</p><p>Version: 1.0</p><p>Author URI: None</p><p>\*/</p><p>add\_action('lionel\_hook\_head', 'lionel\_new\_hook\_head');</p><p>function lionel\_new\_hook\_head(){</p><p>                    echo "Lionel new hook head is working";</p><p>}</p><p>function lio\_head(){</p><p>                    do\_action('lionel\_hook\_head');</p><p>}</p> |
| --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |

Ở ví dụ này tôi vẫn sử dụng lại plugin Demo Hook Action.

Lý giải code xử lý, tôi tạo mới Hook **lionel\_hook\_head** và action là **lionel\_new\_hook\_head,** dùng hàm add\_action cho phép action vừa khởi tạo truy cập vào vị trí của Hook mới.

Khai báo hàm **lio\_head()** để hứng giá trị action vừa khởi tạo, hàm **do\_action()** sẽ đăng ký Hook vào hệ thống WordPress và cho phép nó hiển thị ra trình duyệt.

Do nó là một Hook Action nếu bạn muốn hiển thị thì phải nhúng code vào themes bạn đang sử dụng và vị trí nhúng là phần header, hiện tại tôi đang dùng themes **Twenty Thirteen** nên tôi sẽ truy cập vào folder wp-content->themes->twentythirteen->header.php.

\| <p>1</p><p>2</p><p>3</p><p>4</p><p>5</p><p>6</p><p>7</p><p>8</p><p>9</p><p>10</p><p>11</p><p>12</p><p>13</p><p>14</p><p>15</p><p>16</p><p>17</p><p>18</p><p>19</p><p>20</p><p>21</p><p>22</p><p>23</p><p>24</p><p>25</p><p>26</p><p>27</p><p>28</p><p>29</p><p>30</p><p>31</p><p>32</p><p>33</p><p>34</p><p>35</p><p>36</p><p>37</p><p>38</p><p>39</p><p>40</p><p>41</p><p>42</p><p>43</p><p>44</p><p>45</p><p>46</p><p>47</p><p>48</p><p>49</p><p>50</p><p>51</p><p>52</p> | <p>\<?php</p><p>/\*\*</p><p> \* The Header template for our theme</p><p> \*</p><p> \* Displays all of the \<head> section and everything up till \<div id="main"></p><p> \*</p><p> \* @package WordPress</p><p> \* @subpackage Twenty\_Thirteen</p><p> \* @since Twenty Thirteen 1.0</p><p> \*/</p><p>?>\<!DOCTYPE html></p><p>\<!--\[if IE 7]></p><p>\<html class="ie ie7" \<?php language\_attributes(); ?>></p><p>\<!\[endif]--></p><p>\<!--\[if IE 8]></p><p>\<html class="ie ie8" \<?php language\_attributes(); ?>></p><p>\<!\[endif]--></p><p>\<!--\[if !(IE 7) & !(IE 8)]>\<!--></p><p>\<html \<?php language\_attributes(); ?>></p><p>\<!--\<!\[endif]--></p><p>\<head></p><p>                    \<meta charset="\<?php bloginfo( 'charset' ); ?>"></p><p>                    \<meta name="viewport" content="width=device-width"></p><p>                    \<title>\<?php wp\_title( '|', true, 'right' ); ?>\</title></p><p>                    \<link rel="profile" href="[http://gmpg.org/xfn/11">](http://gmpg.org/xfn/11">)</p><p>                    \<link rel="pingback" href="\<?php bloginfo( 'pingback\_url' ); ?>"></p><p>                    \<!--\[if lt IE 9]></p><p>                    \<script src="\<?php echo get\_template\_directory\_uri(); ?>/js/html5.js">\</script></p><p>                    \<!\[endif]--></p><p>                    \<?php lio\_head(); ?></p><p>                    \<?php wp\_head(); ?></p><p>\</head></p><p>\<body \<?php body\_class(); ?>></p><p>                    \<div id="page" class="hfeed site"></p><p>                                        \<header id="masthead" class="site-header" role="banner"></p><p>                                                            \<a class="home-link" href="\<?php echo esc\_url( home\_url( '/' ) ); ?>" title="\<?php echo esc\_attr( get\_bloginfo( 'name', 'display' ) ); ?>" rel="home"></p><p>                                                                                \<h1 class="site-title">\<?php bloginfo( 'name' ); ?>\</h1></p><p>                                                                                \<h2 class="site-description">\<?php bloginfo( 'description' ); ?>\</h2></p><p>                                                            \</a></p><p>                                                            \<div id="navbar" class="navbar"></p><p>                                                                                \<nav id="site-navigation" class="navigation main-navigation" role="navigation"></p><p>                                                                                                    \<button class="menu-toggle">\<?php \_e( 'Menu', 'twentythirteen' ); ?>\</button></p><p>                                                                                                    \<a class="screen-reader-text skip-link" href="#content" title="\<?php esc\_attr\_e( 'Skip to content', 'twentythirteen' ); ?>">\<?php \_e( 'Skip to content', 'twentythirteen' ); ?>\</a></p><p>                                                                                                    \<?php wp\_nav\_menu( array( 'theme\_location' => 'primary', 'menu\_class' => 'nav-menu' ) ); ?></p><p>                                                                                                    \<?php get\_search\_form(); ?></p><p>                                                                                \</nav>\<!-- #site-navigation --></p><p>                                                            \</div>\<!-- #navbar --></p><p>                                        \</header>\<!-- #masthead --></p><p>                                        \<div id="main" class="site-main"></p> |
\| --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |

Do hàm lio\_head() đã hứng giá trị của action lionel\_new\_hook\_head, nên bạn chỉ cần nhúng ở phía trên hàm wp\_head() và kết quả là phần head của website đã xuất hiện dòng “Lionel new hook head is working”.

[![Xây dựng WordPress plugin với lập trình hướng đối tượng](file:///C:/Users/ADMINI~1/AppData/Local/Temp/msohtmlclip1/01/clip_image001.png)](http://vdevpro.com/wp-content/uploads/2017/04/xay-dung-wordpress-plugin-voi-lap-trinh-huong-doi-tuong-1205.jpg)

Lionel Hook New Head

![](https://1113999984-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-M84NwP_L_qEsBHOa2xo%2F-M84qGfWnTAPAD8FXImj%2F-M84qqMl37mq-_5k-Rx_%2F1.png?alt=media\&token=e48296ca-6aab-4c06-8777-4c9046650f74)

Kế tiếp tôi sẽ hướng dẫn bạn truyền tham số vào Action Hook.

Như bạn đã biết, hàm add\_action có tất cả là 4 tham số,  tham số thứ tư sẽ xác định số lượng các tham số bạn truyền vào action.

| 1 | add\_action('lionel\_hook\_head', 'lionel\_new\_hook\_head', '', 2); |
| - | -------------------------------------------------------------------- |

Do tham số thứ ba mặc định là số 10, nên nó sẽ hoạt đồng ngầm, để sử dụng được tham số thứ tư bạn cần set giá trị cho tham số thứ ba là một con số bất kì hoặc cho nó rỗng. Ở ví dụ này tôi sẽ truyền hai tham số $css = ‘css’ , $js = ‘jquery’ vào action, nên tôi sẽ cho tham số thứ tư thuộc hàm add\_action là 2.

**Đoạn code xử lý:**

| <p>1</p><p>2</p><p>3</p><p>4</p><p>5</p><p>6</p><p>7</p><p>8</p><p>9</p><p>10</p><p>11</p><p>12</p><p>13</p><p>14</p><p>15</p><p>16</p><p>17</p><p>18</p><p>19</p><p>20</p><p>21</p><p>22</p> | <p>\<?php</p><p>/\*\*</p><p> \* @package  Demo Hook Action By Lionel</p><p> \* @version 0.1</p><p> */</p><p>/*</p><p>Plugin Name: Demo Hook Action</p><p>Plugin URI: <http://laptrinhweb.org></p><p>Description: Demo về cách sử dụng Hook Action.</p><p>Author: Lionel</p><p>Version: 1.0</p><p>Author URI: None</p><p>\*/</p><p>add\_action('lionel\_hook\_head', 'lionel\_new\_hook\_head', '', 2);</p><p>function lionel\_new\_hook\_head($css, $js){</p><p>                    echo 'Lionel new hook head is working with '.$css. ' and '.$js.'';</p><p>}</p><p>function lio\_head($css = 'css', $js = 'jquery'){</p><p>                    do\_action('lionel\_hook\_head', $css, $js);</p><p>}</p> |
| --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |

Phần action lionel\_new\_hook\_head bạn truyền tham số rỗng vào  còn ở phần hàm lio\_head() hứng giá trị của action thì bạn cho giá trị vào tham số, ở hàm do\_action() ngoài tên Hook ra bạn cần phải truyền vào 2 tham số vừa khai báo. Làm theo đoạn code bạn sẽ nhận được kết quả.

[![Xây dựng WordPress plugin với lập trình hướng đối tượng](file:///C:/Users/ADMINI~1/AppData/Local/Temp/msohtmlclip1/01/clip_image002.png)](http://vdevpro.com/wp-content/uploads/2017/04/xay-dung-wordpress-plugin-voi-lap-trinh-huong-doi-tuong-1205-1.jpg)

![](https://1113999984-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-M84NwP_L_qEsBHOa2xo%2F-M84qGfWnTAPAD8FXImj%2F-M84qtBXixce9pw08p0R%2F2.png?alt=media\&token=5dc0efd3-9c5b-466d-9702-b92e30b0198e)

Lionel Hook New Head Param

**Lưu ý:**&#x20;

Nếu bạn truyền vào 4 tham số thì ở hàm add\_action() ở tham số thứ tư bạn phải điền vào là số 4, tức là khai báo bao nhiêu tham số thì điền đúng số lượng vào là được.

3/ Sử dụng class với WordPress Action Hook

Ở mục 2 trong bài thì bạn đang viết plugin với phương pháp lập trình truyền thống là hướng thủ túc, ở phần này tôi sẽ hướng dẫn bạn tạo ra class **lionelHook** để xử lý mọi hành động của plugin.

Bạn sẽ cần phải thêm vào cấu trúc folder plugin một folder mới là inc, trong folder này sẽ chứa file frontend.php.

**Nội dung file frontend.php:**

| <p>1</p><p>2</p><p>3</p><p>4</p><p>5</p><p>6</p> | <p>\<?php</p><p>class LionelHook{</p><p>                    public function lionel\_hook\_demo(){</p><p>                                        echo "Lionel Hook is working with OOP";</p><p>                    }</p><p>}</p> |
| ------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |

Khởi tạo Lớp (class) LionelHook chứa phương thức lionel\_hook\_demo (action).

**Nội dung file lionel-hook.php:**

| <p>1</p><p>2</p><p>3</p><p>4</p><p>5</p><p>6</p><p>7</p><p>8</p><p>9</p><p>10</p><p>11</p><p>12</p><p>13</p><p>14</p><p>15</p><p>16</p><p>17</p><p>18</p> | <p>\<?php</p><p>/\*\*</p><p> \* @package  Demo Hook Action By Lionel</p><p> \* @version 0.1</p><p> */</p><p>/*</p><p>Plugin Name: Demo Hook Action</p><p>Plugin URI: <http://laptrinhweb.org></p><p>Description: Demo về cách sử dụng Hook Action.</p><p>Author: Lionel</p><p>Version: 1.0</p><p>Author URI: None</p><p>\*/</p><p>$path = plugin\_dir\_path(**FILE**);</p><p>require\_once ''.$path.'inc/frontend.php';</p><p>$lioHook = new LionelHook();</p><p>add\_action('wp\_head', array($lioHook, 'lionel\_hook\_demo'));</p> |
| --------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |

Do class **LionelHook** được định nghĩa ở file frontend.php, vì thế bạn phải nhúng dường dẫn tuyệt đối của nó vào file xử lý chính của plugin, lúc ấy mới có thể gọi đến các phương thức bên trong class.

Tạo biến $lioHook để khởi tạo một đối tượng mới, dùng hàm add\_action để cho phép Action này hoạt động. Do là một đối tượng nên tham số thứ hải của hàm add\_action bạn phải dùng array($tenbien, ‘ten\_action’).

![](https://1113999984-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-M84NwP_L_qEsBHOa2xo%2F-M84qGfWnTAPAD8FXImj%2F-M84qvrAhd4Ya1zj8vnW%2F3.png?alt=media\&token=c56010ab-900a-4d70-85e3-5dd4cb4bb722)

[![Xây dựng WordPress plugin với lập trình hướng đối tượng](file:///C:/Users/ADMINI~1/AppData/Local/Temp/msohtmlclip1/01/clip_image003.png)](http://vdevpro.com/wp-content/uploads/2017/04/xay-dung-wordpress-plugin-voi-lap-trinh-huong-doi-tuong-1205-2.jpg)

Lionel Hook Demo With OOP

Kết quả: Trình duyệt sẽ in ra dòng **Lionel Hook is working with OOP** như hình.

Lúc này tôi muốn tối ưu file xử lý chính của plugin hơn. bằng cách tôi muốn các action sẽ được gọi cùng một lúc khi bắt đầu kích hoạt và tải trang.

**Đoạn code xử lý file frontend.php:**

| <p>1</p><p>2</p><p>3</p><p>4</p><p>5</p><p>6</p><p>7</p><p>8</p><p>9</p><p>10</p><p>11</p><p>12</p><p>13</p><p>14</p><p>15</p> | <p>\<?php</p><p>class LionelHook{</p><p>                    public function  \_\_construct(){</p><p>                                        add\_action('wp\_head', array($this, 'lionel\_hook\_demo'), 19);</p><p>                                        add\_action('wp\_head', array($this, 'lionel\_hook\_demo1'), 18);</p><p>                    }</p><p>                    public function lionel\_hook\_demo(){</p><p>                                        echo "Lionel Hook is working with OOP \<br />";</p><p>                    }</p><p>                    public function lionel\_hook\_demo1(){</p><p>                                        echo "Lionel Hook Demo is working with OOP \<br />";</p><p>                    }</p><p>}</p> |
| ------------------------------------------------------------------------------------------------------------------------------ | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |

Với việc khai báo hai hàm add\_action() vào hàm khởi tạo \_construct() thì bạn sẽ tiết kiệm đc thời gian viết code hơn.  Vì  hàm construct sẽ giúp bạn load cùng lúc hai hoặc nhiều action vào một Hook nào đó. $this (chính nó) là tên của  class. Khi đó file xử lý chính sẽ nhìn đơn giản và gọn gàng hơn rất nhiều.

**File lionel-hook.php:**

| <p>1</p><p>2</p><p>3</p><p>4</p><p>5</p><p>6</p><p>7</p><p>8</p><p>9</p><p>10</p><p>11</p><p>12</p><p>13</p><p>14</p><p>15</p><p>16</p><p>17</p><p>18</p> | <p>\<?php</p><p>/\*\*</p><p> \* @package  Demo Hook Action By Lionel</p><p> \* @version 0.1</p><p> */</p><p>/*</p><p>Plugin Name: Demo Hook Action</p><p>Plugin URI: <http://laptrinhweb.org></p><p>Description: Demo về cách sử dụng Hook Action.</p><p>Author: Lionel</p><p>Version: 1.0</p><p>Author URI: None</p><p>\*/</p><p>$path = plugin\_dir\_path(**FILE**);</p><p>require\_once ''.$path.'inc/frontend.php';</p><p>// Khởi tạo đối tượng để thực thi các hành động bên trong class</p><p>new LionelHook();</p> |
| --------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |

![](https://1113999984-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-M84NwP_L_qEsBHOa2xo%2F-M84qGfWnTAPAD8FXImj%2F-M84qyOCwhYBfES6OeyD%2F4.png?alt=media\&token=f43bb915-b71c-4274-b295-e99700b11ce6)

**Kết quả:**  Phần head sẽ xuất hiện hai câu thông báo.

[![Xây dựng WordPress plugin với lập trình hướng đối tượng](file:///C:/Users/ADMINI~1/AppData/Local/Temp/msohtmlclip1/01/clip_image004.png)](http://vdevpro.com/wp-content/uploads/2017/04/xay-dung-wordpress-plugin-voi-lap-trinh-huong-doi-tuong-1205-3.jpg)

Lionel Hook Demo With OOP Construct

Vấn đề cuối cùng, dùng phương thức **static** trong lập trình hướng đối tượng để gọi đến bất kì phương thức nào trong class mà không cần khởi tạo một đối tượng mới.

**File frontend.php:**

| <p>1</p><p>2</p><p>3</p><p>4</p><p>5</p><p>6</p><p>7</p><p>8</p><p>9</p><p>10</p><p>11</p> | <p>\<?php</p><p>class LionelHook{</p><p>                    public function \_\_construct(){</p><p>                           add\_action('wp\_head', array($this, 'runHook'));</p><p>                    }</p><p>                    public static function runHook(){</p><p>                                        echo "Lionel Hook Demo is working with OOP \<br />";</p><p>                    }</p><p>}</p> |
| ------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |

**File lionel-hook.php:**

| <p>1</p><p>2</p><p>3</p><p>4</p><p>5</p><p>6</p><p>7</p><p>8</p><p>9</p><p>10</p><p>11</p><p>12</p><p>13</p><p>14</p><p>15</p><p>16</p><p>17</p><p>18</p> | <p>\<?php</p><p>/\*\*</p><p> \* @package  Demo Hook Action By Lionel</p><p> \* @version 0.1</p><p> */</p><p>/*</p><p>Plugin Name: Demo Hook Action</p><p>Plugin URI: <http://laptrinhweb.org></p><p>Description: Demo về cách sử dụng Hook Action.</p><p>Author: Lionel</p><p>Version: 1.0</p><p>Author URI: None</p><p>\*/</p><p>$path = plugin\_dir\_path(**FILE**);</p><p>require\_once ''.$path.'inc/frontend.php';</p><p>// Dùng phương thức static gọi tói phương thức runHook mà không cần khởi tạo đối tượng</p><p>LionelHook::runHook();</p> |
| --------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |

&#x20;**Kết quả:** Phần head xuất ra câu thông báo Lionel Hook Demo is working with OOP.

Như vậy, thông qua 3 ví dụ trên thì bạn đã thấy được sức mạnh của lập trình hướng đối tượng bổ ích ra sao rồi đấy,nó giúp bạn tinh giản các dòng code hơn, file xử lý chính sẽ nhẹ nhàng và load nhanh hơn.

4/ Kết bài

Qua bài viết [**Xây dựng plugin với lập trình hướng đối tượng**](http://vdevpro.com/xay-dung-plugin-voi-lap-trinh-huong-doi-tuong/), tôi hy vọng bạn sẽ lựa chọn cho mình phương pháp coding hiệu quả và dễ nâng cấp, tôi không ép bạn phải từ bỏ cách lâp trình truyền thống, nhưng bạn sẽ thấy nhiều cái lợi nếu áp dụng phương pháp OOP để xây dựng plugin. Ở bài tiếp theo bạn sẽ phải làm quen với kiểu Hook Filter.

Series Navigation[<< Giới thiệu WordPress Action Hook](http://vdevpro.com/gioi-thieu-wordpress-action-hook/)[Sử dụng Filter Hook toàn tập >>](http://vdevpro.com/su-dung-filter-hook-toan-tap/)

Nguồn: laptrinhweb.org
