Unlimited Plugins, WordPress themes, videos & courses! Unlimited asset downloads! From $16.50/m
Advertisement
  1. Code
  2. WordPress
Code

Những thông báo admin liên tục của WordPress: Phần 3

by
Difficulty:IntermediateLength:LongLanguages:
This post is part of a series called Persisted WordPress Admin Notices.
Persisted WordPress Admin Notices: Part 2
Persisted WordPress Admin Notices: Part 4

Vietnamese (Tiếng Việt) translation by Andrea Ho (you can also view the original English article)

Chào mừng trở lại với loạt bài viết về các thông báo cố định của trang admin trong WordPress. Hiện thời chúng tai có thuận lợi để có thể mở rộng chức năng thông báo của trang quản trị và kiểm soát khi nào chúng xuất hiện trên trang.

Sau đó, chúng tôi sẽ chuyển sang các thông báo liên tục của trang quản trị và làm sao bạn có thể đảm bảo rằng chúng bị loại bỏ theo cách để ngăn chúng tái xuất hiện lại khi trang quản trị được tải lại.

Điều này đặc biệt quan trọng vì thông báo được thay đổi ở trang đã được triển khai trong plugin và các themes chỉ thực sự hữu ích khi bạn có thể loại bỏ chúng vĩnh viễn. Không chỉ đơn giản là thêm lớp CSS loại bỏ để tắt hiển thị.

Kiểm soát khi nào những thông báo của admin xuất hiện

Cho đến bây giờ, tất cả các thông báo của trang quản trị đã được hiển thị ngay khi tải trang. Đôi khi điều này không thuận tiện và bạn muốn thông báo trang quản trị được hiển thị sau khi một sự kiện nhất định đã được kích hoạt.

Làm thế nào nếu chúng ta muốn thông báo của admin được hiển thị trên trang tùy chọn plugin mà chúng tôi đã tạo ra trước đó, nhưng chỉ sau khi nút Save Changes được nhấp vào?

Chúng ta đã biết từ phần hai cách làm thế nào để hạn chế một thông báo admin đến trang tùy chọn plugin. Hãy tìm hiểu làm thế nào chúng ta có thể kích hoạt nó xuất hiện sau khi các tùy chọn plugin đã được lưu lại.

Bắt đầu bằng việc comment lại phần gọi hàm add_action cho plugin_admin_notice. Sau đó, lần thứ tư gọi hàm add_action trong init như sau:

Bất cứ khi nào các tùy chọn plugin được lưu, giá trị cập nhật cài đặt của true sẽ được bổ sung vào biến toàn cục $ _GET (dạng array). Chúng ta có thể sử dụng điều này để xác định xem liệu chúng tôi có cần hiển thị thông báo ở trang quản trị của chúng tôi hay không.

Bổ sung một phương thức mới conditional_plugin_admin_notice vào Gwyer_Admin_Notices, nó in ra giá trị $ _GET trên màn hình.

Khi trang tùy chọn plugin được tải bình thường, chúng tôi không thấy giá trị đặt cho phần settings-updated.

Normal Plugin Options Page Loading

Bây giờ nhập một số văn bản trong trường Enter some text và nhấp vào Save Changes. Lần này, chúng ta thấy settings-updated được xét là true, mà chúng ta có thể yên tâm sừ dụng.

The settings-updated value set to true

Thay thế conditional_plugin_admin_notice với:

Từ bây giờ, đoạn code này sẽ trở nên quen thuộc với bạn. Dù thế, đà có một vài tính năng mới được thêm vào. Thứ nhất, biểu thức điều kiện đã được mở rộng để kiểm tra sự có mặt của settings-update. Bây giờ, thông báo của quản trị viên sẽ chỉ hiển thị nếu chúng ta đang ở trang tùy chọn plugin nếu cài đặt-cập nhật được xét thành true.

Ngoài ra, tên hiển thị hiện tại của người dùng được xuất ra để làm cho thông báo của admin trông có vẻ cá nhân một chút.

A more personal admin notice message

Hàm wp_get_current_user() trả về thông tin về người dùng đang đăng nhập. Đối tượng này được lưu trữ trong $current_user và chứa các thông tin như email người dùng, ID, tên, họ và tên hiển thị, đây là thuộc tính đặc biệt mà chúng tôi quan tâm.

Cuối cùng, cho một chút bóng bẩy, chúng tôi đã chặn hiển thị của thông báo mặc của admin vì vậy thông báo đã chỉnh sửa của chúng tôi là cái duy nhất hiển thị tới người dùng. Để đạt được điều này, chúng tôi chỉ cần thêm một dòng code vào hàm conditional_plugin_admin_notice() để xuất ra CSS để ẩn thông báo quản trị không mong muốn.

Kết quả cuối cùng khi các tùy chọn plugin được lưu lại được hiển thị bên dưới.

The finished admin notice to show the plugin has been updated

Mặc dù thao tác này hoạt động tốt với mục đích minh họa, cách tiếp cận tốt hơn (và sạch hơn) sẽ thêm phong cách vào một bảng kiểu riêng biệt và chỉ thêm vào các trang tùy chọn plugin.

Thông báo mới của admin của chúng tôi có thể thậm chí được mở rộng hơn theo nhiều cách. Một khả năng có thể là duy trì nhật ký, có thể lưu trữ date/time hiện tại cùng với thông tin người dùng mỗi khi các tùy chọn plugin được lưu lại.

Hoặc làm thế nào để đưa thông báo của admin để hiển thị số lần các tùy chọn plugin được lưu vào ngày, day, month, v.v ...? Tôi chắc rằng bạn cũng có thể nghĩ ra nhiều ví dụ nữa!

Loại bỏ những thông báo cố định của admin một cách hiệu quả.

Đã đến lúc chúng ta nghiên cứu sâu hơn đoạn code khi chúng tôi chuyển sang chú ý của chúng tôi để việc loại bỏ thông báo cốt định của admin. Cho đến bây giờ, cách duy nhất chúng ta thấy để thực hiện được điều này là thêm lớp CSS .is-dismissible vào thẻ div của khung chứa của thông báo admin Điều này loại bỏ thông báo admin cho trang hiện tại, nhưng nó không được dùng nhiều trong thực tiễn vì thông báo sẽ tái xuất hiện khi trang admin được tải lại

Vậy làm sao chúng ta có thể thay đổi nó? Chúng ta sẽ xem xét những phương pháp khác nhau để loại bỏ thông báo admin cố định, gồm có:

  • Thông báo admin mất đi một lần - nghĩa là biến mất sau một lần xem.
  • Một counter (bộ đếm) thông báo admin sẽ biến mất sau một số lượt xem nhất định.
  • Thông báo admin cố định vẫn bị vô hiệu sau khi tải lại trang.
  • Loại bỏ có sự tuỳ biến (thông báo admin được xoá đi sau khi một hành động cụ thể được hoàn tất).

Trước khi bắt đầu triển khai từng ví dụ này, hãy đảm bảo tất cả những lần gọi add_action() trong Gwyer_Admin_Notices::init () đã được comment lại. Sau đó thêm vào file mới có tên dismissable-admin-notices.php vào thư mục plugin tên admin_notices. Mở file này lên và bổ sung vào class sau:

Trong admin_notices.php, gọi một hàm require_once() để nhập class mới của chúng ta:

Class Gwyer_Dismissible_Admin_Notices sẽ gồm có tất cả code liên quan đến việc loại bỏ những thông báo dai dẳng.

Thông báo admin mất đi một lần

Phương pháp đầu tiên chúng ta sẽ xem là làm thế nào để hiển thị một thông báo admin chỉ một lần để nó không xuất hiện lại khi tải trang. Bạn có thể sử dụng phương pháp này để thông báo cho người dùng khi plugin hoặc theme vừa được kích hoạt.

Hãy thực hiện điều này cho plugin Admin Notices của chúng tôi. Chúng tôi sẽ bắt đầu bằng cách đăng ký một tùy chọn WordPress transient khi kích hoạt plugin, nó được thiết lập để xét hết hạn gần như ngay lập tức.

Trong class Gwyer_Dismissible_Admin_Notices, gọi một hàm register_activation_hook():

Hàm register_activation_hook() yêu cầu bạn xác định đường dẫn đến file chính của plugin, nhưng chúng tôi hiện đang ở file dismissible-admin-notices.php. Vì vậy, chúng ta không thể sử dụng hằng số __FILE__ của PHP mà chúng ta đã sử dụng trước đó vì kết quả luôn dẫn đến file PHP hiện tại.

Thay vào đó chúng ta phải xây dựng đường dẫn đến file plugin chính bằng cách sử dụng plugin_dir_path (__FILE__). 'admin-notices.php'.

Khi plugin Admin Notices được kích hoạt, nó sẽ chạy đoạn code đã được bổ vào một phương thức set_admin_notice_transient, mà chúng ta sẽ định nghĩa tiếp theo.

Phương thức này tạo ra transient mới gọi là 'admin-notice-transient' với một giá trị là true, và được thiết lập thời gian hết hạn là năm giây.

Hãy tận dụng transient này bằng việc hiển thị có điều kiện một thông báo admin nếu chúng ta ở trên trang admin đúng và transient của chúng tôi vẫn tồn tại.

Gọi thêm hàm add_action() trong hàm init().

Sau đó, thêm hàm callback display_admin_notice là một phương thức class mới:

Tương tự như các ví dụ trước đó, thông báo admin chỉ hiển thị nếu chúng ta ở trên một trang cụ thể - trong trường hợp này, là trang chính của plugin cho admin. Nhưng chúng ta có thêm một điều kiện là 'admin-notice-transient' cũng phải tồn tại, nếu không thông báo admin sẽ không hiển thị.

Sau khi thông báo admin xuất hiện, transient sẽ bị xóa ngay lập tức, thậm chí dù ban đầu chúng ta đặt nó để hết hạn sau 5 giây. Điều này chỉ đảm bảo rằng nó sẽ không được hiển thị lại. Điều này có thể xảy ra nếu người dùng cố gắng tải lại trang plugin một cách nhanh chóng. Nhưng bằng cách cố tình xóa transient chúng ta có thể chắc chắn điều này sẽ không bao giờ xảy ra.

Để kiểm tra đoạn code mà chúng tôi vừa thêm vào, hãy vào trang của những plugin chính và vô hiệu, sau đó kích hoạt lại, plugin Admin Notices.

The one-off admin notice

Trọng điểm ở đây là thiết lập transisent của 'admin-notice-transient'. Nếu không có nó, thông báo admin sẽ xuất hiện mỗi khi trang plugin được tải (sau khi plugin được kích hoạt), đây không phải là điều chúng ta muốn.

Bộ đếm Thông báo admin

Tiếp theo là thông báo admin sẽ chỉ hiển thị một số lần, sau đó sẽ không hiển thị nữa. Đồng thời, khoảng thời gian này sẽ không bị hạn chế đối với bất kỳ trang admin cụ thể nào.

Trước khi chúng ta bắt đầu, trong class Gwyer_Dismissible_Admin_Notices, hãy comment lại các phần gọi hàm register_activation_hook()add_action(). Bây giờ chúng ta hãy thiết lập thông báo admin cơ bản và chúng tôi sẽ nhanh chóng mở rộng chức năng của nó.

Thêm một hàm add_action() vào hàm init():

Và sau đó đưa vào hàm callback display_admin_notice_counter():

Điều này sẽ hiển thị một thông báo admin chuẩn mực, thông báo này sẽ xuất hiện trên mọi trang admin của WordPress.

Standard admin notice ready for customisation

Hãy suy nghĩ về những gì chúng ta cần làm. Thông báo admin của chúng tôi sẽ hiển thị một số lần, và mỗi lần nó xuất hiện một bộ đếm nội bộ sẽ tăng lên một giá trị. Khi bộ đếm đạt đến giá trị biên độ, thông báo của quản trị viên sẽ không xuất hiện lại.

Chúng tôi muốn thông báo admin được hiển thị trên bất kỳ trang admin nào và vì thế giá trị bộ đếm phải được duy trì giữa những lần tải trang. Một cách hay để thực hiện điều này là sử dụng chọn lựa dabtase để lưu giá trị đếm lại.

Bổ sung một thuộc tính class counter (bộ đếm) để lưu giá trị biên độ của bộ đếm:

Nó sẽ nhanh chóng được dùng để quản lý thông báo admin đã xuất hiện bao nhiêu lần. Bên trong hàm display_admin_notice_counter(), cập nhật đoạn code như sau:

Trước khi thông báo admin được hiển thị, chúng ta đang lấy chọn lựa counter (bộ đếm), và một giá trị mặc định được trả về nếu nó chưa tồn tại. Sau khi thông báo admin hiển thị, tuỳ chọn counter tăng lên một giá trị và được cập nhật. Nếu nó không tồn tại thì một chọn lựa mới sẽ được tạo ra để lưu thành giá trị hiện tại.

Chúng ta cũng cập nhật lớp CSS cho một thông báo thông tin của trang admin.

Thử đi đến những trang quản trị khác nhau và xem số counter tăng lên mỗi lần.

Counter admin notice in action

Nếu mã ++$counter là một ví dụ về toán tử pre-increment (tăng trước). Nó bổ sung một giá trị $counter trước khi nó được lưu vào database. Nếu chúng tôi sử dụng một toán tử tăng (ví dụ $counter++) sau đó giá trị của $counter có thể sẽ được lưu trước tiênsau đó sẽ được tăng lên, nó sẽ không hoạt động như thế.

Hãy tích hợp $counter_limit để ngăng thông báo admin hiển thị quá nhiều lần. Bổ sung phần này vào display_admin_notice_counter() bên dưới phần khai báo cho $counter.

Bây giờ, một khi thông báo admin hiển thị 5 lần, thì nó sẽ không thiển thị trên những trang admin sau đó. Tuy nhiên, có thể ổn, để hiển thị một thông báo đây là ần cuối cùng thông báo của admin xuất hiện để người dùng biết nó sẽ không xuất hiện lại. Mở rộng biểu thức điều kiện và xuất ra một thông báo bổ sung.

Tuy nhiên, bạn sẽ không nhìn thấy thông báo nếu bạn đã vượt qua giới hạn của counter limit. Bạn có thể tạm thời giải quyết vấn đề này bằng cách tăng giá trị biến $ counter_limit.

Display an additional message on the final render

Cho mục đích kiểm thử, tốt hơn hết là có thể reset biến counter_limit. Nếu bạn biết làm thế nào để chỉnh sửa cơ sở dữ liệu, bạn có thể vào và thay đổi tùy chọn trực tiếp, nhưng điều này có thể là tẻ nhạt để làm nhiều lần. Vì vậy, hãy thực hiện các tính năng đặt lại của chúng ta.

Đầu tiên thay đổi $counter_limit thành 5 và bổ sung nó một thuộc tính mới class:

Sau đó, bên trong init() thay thế

Với

Hàm reset nên hiển thị thông báo quản trị viên truy cập của chúng tôi hoặc xóa tùy chọn cơ sở dữ liệu admin_notice_counter và thay vào đó sẽ hiển thị thông báo về cảnh báo của trang admin.

Để sử dụng tính năng mới reset, chỉ cần thay đổi $ counter_reset thành true và tải bất kỳ trang quản trị nào.

Reset admin notice counter

Sau đó đổi nó về trang thái false lần nữa.

Admin notice counter successfully reset

Lưu ý: Phương pháp này có thể dễ dàng được sử dụng để hiển thị một thông báo ở trang admin chỉ một lần, như chúng ta đã làm trong ví dụ trước, nhưng hơi phức tạp hơn một chút để thiết lập. Nó thực sự phụ thuộc vào những yêu cầu của bạn.

Nếu tất cả những gì bạn cần là một thông báo ở trang admin thì phương pháp trước đó sẽ có thể phù hợp với nhu cầu của bạn hơn và sẽ triển khai nhanh hơn. Tuy nhiên, phương pháp đếm số linh hoạt hơn, và một khi thiết lập, nó cũng dễ sử dụng trong các dự án của riêng bạn.

Tổng kết

Chúng ta đã đề cập khá nhiều điều trong phần ba của loạt bài hướng dẫn này. Chúng ta đã học cách kiểm soát khi nào thông báo quản trị nên xuất hiện thay vì xuất hiện ngay khi trang quản trị đã tải xong. Điều này rất hữu ích theo nhiều khía cạnh, nhưng ví dụ của chúng tôi cho thấy cách hiển thị thông báo phần quản trị đã tuỳ chỉnh sau khi các chọn lựa cho plugin đã được lưu.

Sau đó, chúng tôi chuyển sang hai ví dụ tách biệt về việc loại bỏ thông báo quản trị liên tục. Điều này cho phép bạn rất nhiều tính linh hoạt trong cách bạn trình bày thông báo ở trang quản trị cho người dùng. Và trong phần tiếp theo cũng là cuối cùng của loạt bài hướng dẫn này, chúng tôi sẽ xem qua thêm nhiều cách để xoá bỏ thông báo cố định ở trang quản trị.

Và, để thêm một chút thú vị, chúng tôi sẽ tạo thêm các loại thông báo quản trị của chúng tôi và bổ sung các biểu tượng trang trí.

Advertisement
Advertisement
Looking for something to help kick start your next project?
Envato Market has a range of items for sale to help get you started.