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ì?
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.
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
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.
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' );
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.
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);
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
Ví dụ
o Loại bỏ một Action có sẵn của hệ thống
remove_action('wp_head', 'rsd_link');
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ỏ.
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);
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.
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');
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
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.
Ví dụ 1: Tạo Action Hook mới
o Tạo một Action Hook mới trong Pluginadd_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');
}
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ả
Ví dụ 2: Tạo Action Hook mới có tham số
o Tạo một Action Hook mới trong Pluginadd_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);
}
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ả
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'));
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();
Sử dụng Class cho Action
o Cách 3: sử dụng phương thức staticclass 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();