Hook Action
Giáo trình: Lập trình Wordpress chuyên nghiệp
Biên soạn: ZendVN Group
Website: www.zend.vn
Hook là gì?
www.zend.vn
Hook là gì?
o Hook giúp chúng ta gắn một số chức năng để thực thi
những hành động mà chúng ta muốn mà không phải
đụng vào bất cứ thứ gì ở trong core của WP.
o Plugin chỉ có một cách duy nhất là tương tác với Hook
để thay đổi cách quá trình xử lý của WP.
o Hook cũng được sử dụng trong Core của WP
o WordPress có 2 kiểu Hook chính: Action hook và Filter
hook.
www.zend.vn
Action là gì?
o Action là một hàm được viết bằng PHP trong Plugin
o Gắn Action vào hệ thống WP thông qua hàm có sẳn
add_action()
o Action được viết ra để thực hiện một điều gì đó với hệ
thống WP
o Xác định vị trí (Hook) để gắn Action đã viết của chúng ta
www.zend.vn
Gắn Action vào Hook
o Để gắn một Action vào một vị trí (hook) nào đó chúng
ta sẽ sử dụng hàm:
 add_action( $tag, $function, $priority, $accepted_args );
o Tham số:
 $ tag - Là tên của một 'action hook' của WP (hơn 600 Hooks)
 $function - Tên Action mà bạn viết để tương tác vào hệ thống
 $priority – Độ ưu tiên của Action
 $accepted_args - Số lượng các tham số truy action hook sẽ
được truyền vào hàm của bạn.
www.zend.vn
Ví dụ
function zendvn_myplugin_new_data(){
echo '<div>Chao mung cac ban den voi khoa lap
trinh Wordpress chuyen nghiep cua
<a href="http://www.zend.vn">ZendVN group</a>
</div>';
}
add_action('wp_footer', 'zendvn_myplugin_new_data' );
www.zend.vn
Loại bỏ Action ra khỏi Hook
o Để loại bỏ một Action ra khỏi một vị trí (hook) nào đó
chúng ta sẽ sử dụng hàm:
 remove_action( $tag, $function_to_remove, $priority,$accepted_args );
o Tham số:
 $ tag - Là tên của một 'action hook' của WP (hơn 600 Hooks)
 $function - Tên Action mà bạn viết để tương tác vào hệ thống
 $priority – Độ ưu tiên của Action
 $accepted_args - Số lượng các tham số truy action hook sẽ
được truyền vào hàm của bạn.
www.zend.vn
Ví dụ
function zendvn_myplugin_new_css(){
$cssURL = plugins_url('/css/abc.css',__FILE__);
$css = '<link rel="stylesheet" type="text/css“
media="all" href="' . $cssURL . '" />';
echo $css;
}
add_action('wp_head', 'zendvn_myplugin_new_css',20);
remove_action('wp_head', 'zendvn_myplugin_new_css',20);
www.zend.vn
Sử dụng hàm loại bỏ Action
o Để loại bỏ một Action bất kỳ ra khỏi một vị trí (hook) kể
cả Action đã có sẵn trong hệ thống WP
o Hàm remove_action() phải được sử dụng sau hàm
add_action() thì mới có tác dụng
o Nhiều trong số các action mặc định của WP được định
nghĩa trong tập tin:
 wp-includes/default-filters.php
www.zend.vn
Ví dụ
o Loại bỏ một Action có sẵn của hệ thống
 remove_action('wp_head', 'rsd_link');
www.zend.vn
Loại bỏ tất cả Action
o Để loại bỏ tất cả Action ra khỏi một vị trí (hook) nào
đó chúng ta sẽ sử dụng hàm:
 remove_all_actions( $tag, $priority );
o Tham số:
 $tag - Tên của action hook
 $priority - Độ ưu tiên của action để loại bỏ.
www.zend.vn
Ví dụ
o Loại bỏ tất cả Action có sẵn của hệ thống trong Action
Hook có tên 'wp_head'
 remove_all_actions( 'wp_head' );
o Loại bỏ tất cả Action có sẵn của hệ thống trong Action
Hook có tên 'wp_head' và độ ưu tiên là 20
 remove_all_actions( 'wp_head',20);
www.zend.vn
Kiểm tra sự tồn tại Action trong Hook
o Để kiểm tra sự tồn tại của Action trong một Action
Hook nào đó chúng ta sử dụng hàm
 has_action( $tag, $function_to_check );
o Tham số:
 $tag - Tên của action hook
 $function_to_check - Tên của một hàm để kiểm tra xem
nó có đã thêm vào hook chưa.
www.zend.vn
Ví dụ
o Hàm sẽ trả về giá trị 1 hoặc true nếu trong Hook có gắn
Action
 echo '<br/>' . has_action('wp_head');
o Hàm sẽ trả về giá trị 0 hoặc null nếu trong Hook không
gắn Action
 echo '<br/>' . has_action('wp_footer');
www.zend.vn
Các Action Hook thường sử dụng
o plugins_loaded
o init
o admin_menu
o template_redirect
o wp_head
o Trong phần nâng cao chúng ta sẽ nghiên cứu kỹ luồng
và thứ tự chạy của các Action Hook trong chức năng
như của WP
www.zend.vn
Tạo Action Hook mới
o Vì nhu cầu của website chúng ta cần tạo ra một Action
Hook mới
o Các Action Hook mới thường được gắn vào theme đang
được sử dụng
o Chúng ta sẽ phải sử dụng 2 hàm có sẵn trong WP: là
add_action() và do_action() để xây dựng Action Hook
mới này.
www.zend.vn
Ví dụ 1: Tạo Action Hook mới
o Tạo một Action Hook mới trong Plugin
add_action('new_action_hook', 'new_action_callback');
function new_action_callback()
{
echo '<p>Khoa hoc lap trinh Wordpress tai ZendVN</p>';
}
function the_new_action()
{
do_action('new_action_hook');
}
www.zend.vn
Ví dụ 1: Tạo Action Hook mới
o Nhúng Action Hook mới vào theme đang sử dụng
o Mở tập tin /wp-content/themes/twentyten/footer.php thêm
vào 2 dòng sau:
 <?php the_new_action(); ?>
 <?php do_action('new_action_hook'); ?>
o Sau đó chúng ta chạy thử ở FrontEnd sẽ thấy kết quả
www.zend.vn
Ví dụ 2: Tạo Action Hook mới có tham số
o Tạo một Action Hook mới trong Plugin
add_action('new_action_hook', 'new_action_callback',20,2);
function new_action_callback($courseName,$author)
{
echo '<p>Khoa hoc lap trinh ' . $courseName
. ' tai ' . $author . ' </p>';
}
function the_new_action($courseName = 'Wordpress',$author = "ZendVN")
{
do_action('new_action_hook',$courseName,$author);
}
www.zend.vn
Ví dụ 2: Tạo Action Hook mới có tham số
o Nhúng Action Hook mới vào theme đang sử dụng
o Mở tập tin /wp-content/themes/twentyten/footer.php thêm
vào 2 dòng sau:
 <?php the_new_action(); ?>
 <?php do_action('new_action_hook','ZF 2x','ZendVN'); ?>
o Sau đó chúng ta chạy thử ở FrontEnd sẽ thấy kết quả
www.zend.vn
Sử dụng Class cho Action
o Cách 1: cách đơn giản thường thấy
class ZendvnMyPlugin{
public function thietlap(){
echo '<br/>Su dung Class cho Plugin';
}
}
$zendvn_myplugin = new ZendvnMyPlugin();
add_action('wp_footer', array($zendvn_myplugin, 'thietlap'));
www.zend.vn
Sử dụng Class cho Action
o Cách 2: sử dụng hàm __construct()
class ZendvnMyPlugin{
public function __construct(){
add_action('wp_footer', array($this, 'thietlap'));
}
public function thietlap(){
echo '<br/>Su dung Class cho Plugin 2';
}
}
new ZendvnMyPlugin();
www.zend.vn
Sử dụng Class cho Action
o Cách 3: sử dụng phương thức static
class ZendvnMyPlugin{
public static function init(){
add_action('wp_footer', array(__CLASS__, 'thietlap'));
}
public function thietlap(){
echo '<br/>Su dung Class cho Plugin 3';
}
}
ZendvnMyPlugin::init();
www.zend.vn

Tài liệu lập trình Wordpress - bài 5 - Action và Action hook trong Wordpress

  • 1.
    Hook Action Giáo trình:Lập trình Wordpress chuyên nghiệp Biên soạn: ZendVN Group Website: www.zend.vn
  • 2.
  • 3.
    Hook là gì? oHook giúp chúng ta gắn một số chức năng để thực thi những hành động mà chúng ta muốn mà không phải đụng vào bất cứ thứ gì ở trong core của WP. o Plugin chỉ có một cách duy nhất là tương tác với Hook để thay đổi cách quá trình xử lý của WP. o Hook cũng được sử dụng trong Core của WP o WordPress có 2 kiểu Hook chính: Action hook và Filter hook. www.zend.vn
  • 4.
    Action là gì? oAction là một hàm được viết bằng PHP trong Plugin o Gắn Action vào hệ thống WP thông qua hàm có sẳn add_action() o Action được viết ra để thực hiện một điều gì đó với hệ thống WP o Xác định vị trí (Hook) để gắn Action đã viết của chúng ta www.zend.vn
  • 5.
    Gắn Action vàoHook o Để gắn một Action vào một vị trí (hook) nào đó chúng ta sẽ sử dụng hàm:  add_action( $tag, $function, $priority, $accepted_args ); o Tham số:  $ tag - Là tên của một 'action hook' của WP (hơn 600 Hooks)  $function - Tên Action mà bạn viết để tương tác vào hệ thống  $priority – Độ ưu tiên của Action  $accepted_args - Số lượng các tham số truy action hook sẽ được truyền vào hàm của bạn. www.zend.vn
  • 6.
    Ví dụ function zendvn_myplugin_new_data(){ echo'<div>Chao mung cac ban den voi khoa lap trinh Wordpress chuyen nghiep cua <a href="http://www.zend.vn">ZendVN group</a> </div>'; } add_action('wp_footer', 'zendvn_myplugin_new_data' ); www.zend.vn
  • 7.
    Loại bỏ Actionra khỏi Hook o Để loại bỏ một Action ra khỏi một vị trí (hook) nào đó chúng ta sẽ sử dụng hàm:  remove_action( $tag, $function_to_remove, $priority,$accepted_args ); o Tham số:  $ tag - Là tên của một 'action hook' của WP (hơn 600 Hooks)  $function - Tên Action mà bạn viết để tương tác vào hệ thống  $priority – Độ ưu tiên của Action  $accepted_args - Số lượng các tham số truy action hook sẽ được truyền vào hàm của bạn. www.zend.vn
  • 8.
    Ví dụ function zendvn_myplugin_new_css(){ $cssURL= plugins_url('/css/abc.css',__FILE__); $css = '<link rel="stylesheet" type="text/css“ media="all" href="' . $cssURL . '" />'; echo $css; } add_action('wp_head', 'zendvn_myplugin_new_css',20); remove_action('wp_head', 'zendvn_myplugin_new_css',20); www.zend.vn
  • 9.
    Sử dụng hàmloại bỏ Action o Để loại bỏ một Action bất kỳ ra khỏi một vị trí (hook) kể cả Action đã có sẵn trong hệ thống WP o Hàm remove_action() phải được sử dụng sau hàm add_action() thì mới có tác dụng o Nhiều trong số các action mặc định của WP được định nghĩa trong tập tin:  wp-includes/default-filters.php www.zend.vn
  • 10.
    Ví dụ o Loạibỏ một Action có sẵn của hệ thống  remove_action('wp_head', 'rsd_link'); www.zend.vn
  • 11.
    Loại bỏ tấtcả Action o Để loại bỏ tất cả Action ra khỏi một vị trí (hook) nào đó chúng ta sẽ sử dụng hàm:  remove_all_actions( $tag, $priority ); o Tham số:  $tag - Tên của action hook  $priority - Độ ưu tiên của action để loại bỏ. www.zend.vn
  • 12.
    Ví dụ o Loạibỏ tất cả Action có sẵn của hệ thống trong Action Hook có tên 'wp_head'  remove_all_actions( 'wp_head' ); o Loại bỏ tất cả Action có sẵn của hệ thống trong Action Hook có tên 'wp_head' và độ ưu tiên là 20  remove_all_actions( 'wp_head',20); www.zend.vn
  • 13.
    Kiểm tra sựtồn tại Action trong Hook o Để kiểm tra sự tồn tại của Action trong một Action Hook nào đó chúng ta sử dụng hàm  has_action( $tag, $function_to_check ); o Tham số:  $tag - Tên của action hook  $function_to_check - Tên của một hàm để kiểm tra xem nó có đã thêm vào hook chưa. www.zend.vn
  • 14.
    Ví dụ o Hàmsẽ trả về giá trị 1 hoặc true nếu trong Hook có gắn Action  echo '<br/>' . has_action('wp_head'); o Hàm sẽ trả về giá trị 0 hoặc null nếu trong Hook không gắn Action  echo '<br/>' . has_action('wp_footer'); www.zend.vn
  • 15.
    Các Action Hookthường sử dụng o plugins_loaded o init o admin_menu o template_redirect o wp_head o Trong phần nâng cao chúng ta sẽ nghiên cứu kỹ luồng và thứ tự chạy của các Action Hook trong chức năng như của WP www.zend.vn
  • 16.
    Tạo Action Hookmới o Vì nhu cầu của website chúng ta cần tạo ra một Action Hook mới o Các Action Hook mới thường được gắn vào theme đang được sử dụng o Chúng ta sẽ phải sử dụng 2 hàm có sẵn trong WP: là add_action() và do_action() để xây dựng Action Hook mới này. www.zend.vn
  • 17.
    Ví dụ 1:Tạo Action Hook mới o Tạo một Action Hook mới trong Plugin add_action('new_action_hook', 'new_action_callback'); function new_action_callback() { echo '<p>Khoa hoc lap trinh Wordpress tai ZendVN</p>'; } function the_new_action() { do_action('new_action_hook'); } www.zend.vn
  • 18.
    Ví dụ 1:Tạo Action Hook mới o Nhúng Action Hook mới vào theme đang sử dụng o Mở tập tin /wp-content/themes/twentyten/footer.php thêm vào 2 dòng sau:  <?php the_new_action(); ?>  <?php do_action('new_action_hook'); ?> o Sau đó chúng ta chạy thử ở FrontEnd sẽ thấy kết quả www.zend.vn
  • 19.
    Ví dụ 2:Tạo Action Hook mới có tham số o Tạo một Action Hook mới trong Plugin add_action('new_action_hook', 'new_action_callback',20,2); function new_action_callback($courseName,$author) { echo '<p>Khoa hoc lap trinh ' . $courseName . ' tai ' . $author . ' </p>'; } function the_new_action($courseName = 'Wordpress',$author = "ZendVN") { do_action('new_action_hook',$courseName,$author); } www.zend.vn
  • 20.
    Ví dụ 2:Tạo Action Hook mới có tham số o Nhúng Action Hook mới vào theme đang sử dụng o Mở tập tin /wp-content/themes/twentyten/footer.php thêm vào 2 dòng sau:  <?php the_new_action(); ?>  <?php do_action('new_action_hook','ZF 2x','ZendVN'); ?> o Sau đó chúng ta chạy thử ở FrontEnd sẽ thấy kết quả www.zend.vn
  • 21.
    Sử dụng Classcho Action o Cách 1: cách đơn giản thường thấy class ZendvnMyPlugin{ public function thietlap(){ echo '<br/>Su dung Class cho Plugin'; } } $zendvn_myplugin = new ZendvnMyPlugin(); add_action('wp_footer', array($zendvn_myplugin, 'thietlap')); www.zend.vn
  • 22.
    Sử dụng Classcho Action o Cách 2: sử dụng hàm __construct() class ZendvnMyPlugin{ public function __construct(){ add_action('wp_footer', array($this, 'thietlap')); } public function thietlap(){ echo '<br/>Su dung Class cho Plugin 2'; } } new ZendvnMyPlugin(); www.zend.vn
  • 23.
    Sử dụng Classcho Action o Cách 3: sử dụng phương thức static class ZendvnMyPlugin{ public static function init(){ add_action('wp_footer', array(__CLASS__, 'thietlap')); } public function thietlap(){ echo '<br/>Su dung Class cho Plugin 3'; } } ZendvnMyPlugin::init(); www.zend.vn