Wordpress hook

Làm việc với Filter và Action trong WordPress

WordPress được lập trình viên và người dùng ưa chuộng cũng bởi nó đơn giản, tôi nói đơn giản là ở hệ thống hook của WordPress cực kì nhiều, dày đặc, phong phú và thuận tiện, cách viết hàm và viết hook của WordPress rất đơn giản, giúp ta nhanh chóng có thể thay đổi hoặc thêm chức năng cho WordPress.

Trong bài viết này, tôi sẽ hướng dẫn các bạn làm việc với Filter trong WordPress, một cách đơn giản và dễ hiểu nhất, trong trường hợp nâng cao các bạn cần phải tham khảo WordPress Codex.

Bây giờ, chúng ta hãy tưởng tượng mình có thể chỉnh lại tựa đề, thêm chữ tự động vào trong nội dung, thay đổi sidebar mà không đục vào mã nguồn, đảm bảo an toàn cho mỗi lần update ? Đó chính là các Hook của WordPress, bạn sẽ làm việc trên plugin của riêng mình và thay đổi giá trị mặc định mà core cung cấp, đảm bảo nguyên tắc chung là không đục vào code !

Làm việc với filter

Để tạo và thực hiện một filter là cực kì đơn giản, các bạn chỉ cần gọi bằng hàm apply_filters là có thể mở một filter với một tên bạn định sẵn, các framwork và các plugin lớn đều mở các filter để plugin khác có thể cấu hình hoặc thay đổi kết quả cho nó.

Ví dụ, ở trên giao diện của Jam có hỗ trợ filter tên là “after_title”, tôi làm như sau:

echo apply_filters('after_title', '');

Như vậy, tôi đặt code trên ở ngay dưới tựa đề để mở một filter tên là after_title với nội dung trống, nhằm giúp các plugin khác của Jam có thể hook vào đó mà hiển thị theo cách của mình.

Ví dụ với filter vừa mở, plugin có thể hiển thị chữ A ngay dưới tựa đề, ta làm như sau trong plugin:

function echo_a_to_theme( $data ) {
echo 'A';
}
add_filter('after_title', 'echo_a_to_theme');

Trên đây là cách đơn giản nhất để mở một filter, trường hợp thứ hai là các bạn muốn filter đó có chứa nội dung, tôi lấy ví dụ ngay cái filter của WordPress:

function the_title() {
global $post;
echo apply_filter('the_title', $post->post_title);
}

Như vậy, khi hook vào các bạn có thể chỉnh sửa lại tựa đề trong plugin như sau:

function edit_title_again( $title ) {
echo 'Tựa đề: ' . $title;
}
add_filter('the_title', 'edit_title_again');

Tuy nhiên, các bạn nên để ý, nếu chỉ có một biến trong filter, ta không cần khai báo, nhưng nếu sử dụng từ 2 biến trở lên là phải khai báo thêm trong hàm Add_filter, ta ví dụ như sau:

Trong giao diện, ta khai báo filter cho một trường hiển thị author, dạng thế này:

apply_filters('userdata', $user->name, $user->value);

Thì trong plugin, để tùy chỉnh cả $user->name và $user->value ta cần khai báo như sau trong plugin:

function change_user_data( $name, $value ) {
return $name . $value;
}
add_filter('userdata', 'change_user_data', 99, 2);

Trong đó “99” là độ nặng, càng số bé thì càng hành động sớm, mặc định của WordPress là 10, nếu bạn để 99 thì đợi các hàm khác hook vào Filter trên trả về kết quả rồi tới lượt nó mới hành động, càng số to càng muộn ! Số “2” để khai báo ta sẽ sử dụng 2 giá trị trong hàm change_user_data, nếu không mặc định của nó sẽ là 1, nghĩa là $value sẽ không có giá trị nào cả.

Làm việc với Action

Filter và Action là tương đương, bạn chỉ cần hiểu vậy, tuy nhiên action thường chỉ hành động tại một thời điểm chứ không trả về nội dung hay giá trị nào, hãy tưởng tượng dòng nước chảy từ trên xuống dưới, mỗi một mét ta đặt một cái mấu, bạn thích bám vào mấu nào thì bám 😀

Ví dụ, trong Code của WordPress, ta có Action sớm là “wp” và Action muộn là “init”, bạn có thể thấy code kiểu này:

do_action('wp');

Nếu bạn muốn không cho WordPress thực thi các hàm khác nữa, chỉ cần làm như sau trong plugin:

add_action('wp', 'die_all');
function die_all() {
wp_die('Web đang bảo trì');
}

Như vậy là xong 😀

Action thường là các hành động theo thời điểm, cho nên các giao diện và các plugin thường chỉ hook vào mà không mở action mới, thay vì vậy họ mở filter để các plugin khác chỉnh lại kết quả trả về.

Tổng kết

WordPress vẫn là mã nguồn tuyệt vời để các lập trình viên thực hành và các blogger viết blog, mọi hàm và mọi hook của WOrdpress đều rất đơn giản và dễ hiểu cho nên bạn có thể nhanh chóng làm quen được với nó.

Nhất là các bạn mới học lập trình, WordPress là mã nguồn cực kì dễ hiểu để các bạn học tập !

Chúc các bạn thành công !

 

TÁC GIẢ:

Tôi là Jam, thâm niên 7 năm thiết kế website và làm SEO. Hãy theo dõi blog của tôi để nhận được nhiều chia sẻ thú vị xung quanh chủ đề công nghệ.

Có 1 bình luận !

Trả lời

Email của bạn sẽ không được hiển thị công khai. Các trường bắt buộc được đánh dấu *