Students Save 30%! Learn & create with unlimited courses & creative assets Students Save 30%! Save Now
Advertisement
  1. Code
  2. WordPress Plugins
Code

Tạo một hệ thống thông báo tuỳ biến trong WordPress, Phần 4

by
Difficulty:IntermediateLength:LongLanguages:
This post is part of a series called Creating a Custom WordPress Messaging System.
Creating a Custom WordPress Messaging System, Part 3

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

Trong loạt bài này, chúng ta xem xét cách tạo ra một hệ thống cho phép chúng ta lập trình để tạo ra các thông báo tuỳ biến hiển thị trên một trang quản trị nhất định trong phần back-end của WordPress.

Nếu bạn đã theo dõi loạt bài cho đến lúc này, thì bạn đã nắm được:

  • Chúng ta đã thiết lập nền móng cho plugin được sử dụng trong suốt loạt bài này, và thậm chí phát triển nó lên một chút nữa.
  • Chúng ta đã định nghĩa và sử dụng một hook tùy biến mà chúng ta có thể sử dụng để kết xuất Settings Message.
  • Chúng ta đã hỗ trợ thêm các thông báo thành công, cảnh báo và lỗi có thể được kết xuất ở phía trên cùng của một trang cài đặt nào đó.

Như đã đề cập trong bài trước:

Nhưng nếu bạn đã đọc bất kỳ hướng dẫn nào trước đây của tôi, bạn sẽ biết rằng tôi không phải là một fan hâm mộ của việc lặp lại code. Cũng không phải là fan hâm mộ của việc có duy nhất một lớp mà làm nhiều việc khác nhau. Và, không may, đó chính xác là những gì chúng ta đang làm ở đây.

Và chúng ta sẽ đề cập đến nó trong bài hướng dẫn cuối cùng này. Trong phần kết, chúng ta sẽ có một giải pháp hoàn chỉnh được tái cấu trúc bằng cách sử dụng một số nguyên lý của lập trình hướng đối tượng chẳng hạn như thừa kế. Chúng ta cũng sẽ có một vài phương thức mà chúng ta có thể sử dụng để lập trình hoặc nó có thể được đăng ký với hệ thống hook của WordPress.

Bắt đầu ở Phần cuối

Tại thời điểm này, bạn nên biết chính xác những gì bạn cần có trong môi trường phát triển cục bộ của bạn. Cụ thể, bạn nên có những thứ sau đây:

  • PHP 5.6.25 và MySQL 5.6.28
  • Apache hoặc Nginx
  • WordPress 4.6.1
  • Trình soạn thảo hoặc IDE yêu thích của bạn

Tôi cũng giới thiệu phiên bản mới nhất của mã nguồn vì nó sẽ cho phép bạn duyệt qua tất cả những thay đổi mà chúng ta sẽ làm. Nếu bạn không có nó, cũng không sao, nhưng tôi khuyên bạn nên đọc lại các hướng dẫn trước đây trước khi tiếp tục.

Trong bài trước

Hãy nhớ lại (hoặc biết được từ trích dẫn ở trên), các hướng dẫn trước đây để lại cho chúng ta một lớp duy nhất mà nó làm quá nhiều việc.

Một cách để biết điều này là nếu bạn đã mô tả những gì mà lớp đã làm, thì bạn sẽ không thể có được một câu trả lời duy nhất. Thay vào đó, bạn sẽ có thể nói rằng nó chịu trách nhiệm về việc xử lý tin nhắn thành công, cảnh báo, lỗi, và kết xuất tất cả chúng độc lập với nhau.

Và mặc dù bạn có thể cho rằng nó "quản lý các thông báo tùy biến", nhưng bạn sẽ không nhất thiết phải mô tả lớp một cách dài dòng. Đó là những gì mà chúng ta kỳ vọng sẽ giải quyết trong hướng dẫn này.

Trong bài cuối cùng

Cụ thể, chúng ta sẽ xem xét làm những thứ sau đây:

  • loại bỏ lớp Settings Messenger cũ
  • thêm một lớp mới, một lớp tổng quát hơn
  • thêm một lớp Settings Messenger cùng với cái để giao tiếp
  • giới thiệu các phương thức mà chúng ta có thể sử dụng độc lập với WordPress
  • đơn giản hoá cách WordPress kết xuất các thông báo

Chúng ta đã phân chia công việc, vì vậy hãy bắt đầu với tất cả những thứ ở trên.

Cấu trúc lại công việc của chúng ta

Khi đề cập đến cấu trúc lại công việc của chúng ta, nó giúp để biết chính xác những gì mà chúng ta muốn làm. Trong trường hợp của chúng ta, chúng ta nhận ra rằng có rất nhiều code trùng lặp có thể được gom lại.

Hơn nữa, chúng ta có ba kiểu thông báo khác nhau được quản lý theo cùng một cách giống nhau để kết xuất chúng. Và trong trường hợp đó, vấn đề thuộc về thuộc tính class trong HTML.

Vì vậy, chúng ta có thể tổng quát hoá code đó để tập trung vào một kiểu cụ thể, và chúng ta có thể gói gọn rất nhiều phương thức cho việc thêm các thông báo thành công hoặc truy vấn thông báo lỗi bằng cách khái quát một phương thức để nhận biết kiểu đã nói ở trên.

Cuối cùng, chúng ta sẽ làm điều đó. Nhưng trước tiên, hãy dọn dẹp một chút.

1. Xoá bỏ Settings Messenger cũ

Trong bài trước, chúng ta đã làm việc với một lớp được gọi là Settings_Messenger. Đến thời điểm này, nó đã phục vụ cho mục đích của nó, nhưng chúng ta sẽ cấu trúc lại lớp này trong suốt phần còn lại của hướng dẫn này.

Khi nói đến việc cấu trúc lại, đơn giản là xoá lớp và bắt đầu từ đầu. Đôi khi điều này là hợp lý, nhưng lần này thì không phải. Thay vào đó, chúng ta sẽ lấy lớp và tái cấu trúc những gì đã có.

Nói tóm lại, đừng xóa tập tin và bắt đầu bằng một cái mới. Thay vào đó, lần theo những gì chúng ta đang làm trong suốt hướng dẫn này.

2. Một lớp Settings Message mới

Trước tiên, chúng ta hãy giới thiệu một lớp Settings_Message. Nó đại diện cho bất kỳ kiểu settings message cùng với cái mà chúng ta sẽ viết. Có nghĩa là, nó sẽ quản lý thông báo thành công, thông báo lỗi và cảnh báo.

Để làm điều này, chúng ta sẽ định nghĩa lớp, giới thiệu một thuộc tính đơn, và sau đó chúng ta sẽ khởi tạo nó bằng hàm xây dựng. Hãy xem code này, và tôi sẽ giải thích thêm ở dưới:

Lưu ý rằng chúng ta đã tạo một thuộc tính private (riêng tư), $messages. Khi lớp được khởi tạo, chúng ta tạo ra một mảng đa chiều. Mỗi chỉ mục, được xác định bằng success, error hoặc warning, tham chiếu đến mảng riêng của nó trong đó, chúng ta sẽ lưu trữ các thông báo tương ứng.

Tiếp theo, chúng ta cần khả năng để thêm một thông báo, lấy một thống báo, và lấy tất cả các thông báo. Tôi sẽ thảo luận về mỗi cái trong số chúng chi tiết hơn trong giây lát nữa.

Thêm các thông

Trước tiên, hãy xem cách chúng ta thêm các thông báo:

Thông báo này trước tiên lấy chuỗi đầu vào và lọc dữ liệu. Sau đó, nó sẽ kiểm tra xem nó đã tồn tại trong các thông báo thành công hay chưa. Nếu đã có, thì nó chỉ đơn giản là return. Tất cả là để không trùng lắp các thông báo.

Nếu không, nó thêm thông báo vào bộ sưu tập.

Lấy các thông báo

Việc truy vấn các thông báo có hai dạng:

  1. kết xuất các thông báo theo kiểu
  2. kết xuất các thông báo trong trang quản trị (hoàn tất bằng việc lọc mã HTML, v.v..)

Nên nhớ rằng, đôi khi chúng ta có thể chỉ muốn hiển thị các thông báo cảnh báo. Cũng có khi, chúng ta có thể muốn hiển thị tất cả các thông báo. Vì có hai cách để làm điều này, nên chúng ta có thể tận dụng một cách và sau đó tận dụng nó ở trong một hàm khác.

Hơi khó hiểu đúng không? Hãy tập trung và tôi sẽ giải thích tất cả. Phần đầu tiên mà chúng ta sẽ tập trung vào đó là làm thế nào để hiển thị các thông báo tuỳ theo kiểu (thành công, lỗi hoặc cảnh báo). Đây là đoạn code để làm điều đó (và nó nhìn quen quen):

Lưu ý ở đây rằng chúng ta đang sử dụng nhiều code tương tự từ hướng dẫn trước; tuy nhiên, chúng ta đã tổng quát nó để cho nó xem xét $type và tự động áp dụng nó vào mã đánh dấu.

Điều này cho phép chúng ta có một hàm đơn nhất để kết xuất thông báo của chúng ta. Tuy nhiên, đây không phải là tất cả. Nếu chúng ta muốn lấy toàn bộ các thông báo thì sao? Điều này có thể kết xuất trên một trang hoặc lập trình để lấy chúng cho một số xử lý khác.

Để làm điều này, chúng ta có thể giới thiệu một hàm khác:

Thông báo này rất dễ hiểu. Nó chỉ đơn giản là lặp qua tất cả các thông báo mà chúng ta có ở trong bộ sưu tập của chúng ta và gọi hàm get_messages mà chúng ta đã nêu ở trên.

Nó vẫn kết xuất tất cả lại với nhau (chúng ta sẽ thấy một ví dụ về sử dụng chúng trong việc cài đặt một hook tuỳ biến trong giây lát nữa). Nếu bạn muốn sử dụng chúng cho một mục đích khác, bạn có thể nối kết quả thành một chuỗi và trả về nó cho hàm gọi, hoặc thực hiện một số chức năng lập trình khác.

Đây là một trong những cài đặt.

3. Settings Messenger

Lớp thật sự của nó là Settings_Message. Nhưng làm thế nào chúng ta giao tiếp với nó? Tất nhiên, chúng ta có thể nói chuyện trực tiếp với nó, nhưng nếu có một lớp trung gian, thì chúng ta có thể kiểm soát những gì được trả về cho chúng ta mà không cần thêm nhiệm vụ đó vào lớp Settings_Message, đúng không?

Vào trong Settings_Messenger. Lớp này chịu trách nhiệm cho phép chúng ta đọc và ghi Settings Message. Tôi nghĩ rằng một trường hợp có thể được thực hiện là bạn có thể chia điều này thành hai lớp theo nhiệm vụ của nó vì cả hai đọc và ghi nhưng, giống như một messenger người gửi và người nhận, đó là mục đích của lớp này.

Thiết lập ban đầu của lớp là đơn giản.

  • Hàm xây dựng tạo ra một đối tượng của lớp Settings_Message mà chúng ta có thể sử dụng để gửi và nhận thông báo.
  • Nó liên kết một phương thức với hook tuỳ biến tutsplus_settings_messages mà chúng ta đã định nghĩa trong một bài trước đó.

Hãy xem xét cặp phương thức đầu tiên:

Hãy nhớ lại phần đầu trong hướng dẫn này, chúng ta có hook được định nghĩa trong view của chúng ta, nó có thể được tìm thấy tại settings.php. Để được rõ, thì nó được liệt kê ra dưới đây:

Tuy nhiên, lưu ý là, hook đặc biệt này tận dụng phương thức get_all_messages mà chúng tôi sẽ xem xét trong một lát nữa. Nó không cần phải sử dụng phương thức này. Thay vào đó, nó có thể được sử dụng để đơn giản hoá việc kết xuất các thông báo thành công hoặc bất kỳ phương thức nào khác mà bạn muốn sử dụng.

Thêm thông báo

Tạo các hàm để thêm thông báo thì đơn giản như những hàm này, yêu cầu một kiểu và bản thân thông báo. Nên nhớ rằng, Settings_Message chịu trách nhiệm lọc các thông tin để chúng ta có thể đơn giản là truyền vào trong các thông báo.

Hãy xem dưới đây nơi mà chúng ta đang thêm các thông báo thành công, cảnh báo và lỗi:

Rất đơn giản, phải không?

Lấy các thông báo

Việc truy xuất các thông báo không khác là mấy ngoại trừ chúng ta chỉ cần cung cấp kiểu của thông báo mà chúng ta muốn lấy:

Đã xong, đúng không?

Nhưng bạn đã nắm được nó chứ?

Lưu ý rằng tất cả các thông báo ở trên tham chiếu đến hai phương thức khác mà chúng ta vẫn chưa thực sự đề cập đến. Đây là những thông báo riêng tư giúp chúng ta đơn giản hóa việc gọi hàm ở trên.

Hãy kiểm tra các phương thức private sau đây cả hai đều chịu trách nhiệm cho việc thêm và truy xuất thông báo trực tiếp từ đối tượng của Settings_Message:

điều đó đã kết thúc lớp Settings_Messenger mới. Tất cả điều này đơn giản hơn rất nhiều, không phải vậy sao?

Khởi động Plugin

Tuy nhiên, có một câu hỏi đặt ra: làm thế nào chúng ta khởi động plugin bây giờ sau khi chúng ta đã tạo ra tất cả những thay đổi này?

Hãy xem toàn bộ hàm dưới đây:

Và thật đơn giản.

Một vài điểm cần lưu ý:

  • Nếu bạn không gọi init trên Settings_Messenger, thì bạn không cần phải lo lắng về việc hiển thị bất kỳ thông báo nào ở trên trang cài đặt của bạn.
  • Đoạn code thêm các thông báo cho Settings_Messenger, nhưng nó thực sự không truy xuất bất kỳ cái nào bởi vì tôi đang sử dụng phương thức init.
  • Nếu bạn muốn truy xuất các thông báo thì bạn có thể sử dụng các phương thức mà chúng ta đã nêu ở trên.

Đó là tất cả cho việc cấu trúc lại code. Điều này sẽ không hoạt động một cách chính xác vì vẫn còn một số code cần thiết để nạp tất cả các tập tin yêu cầu trong PHP để cho plugin có thể hoạt động; Tuy nhiên, code ở trên tập trung vào việc tái cấu trúc, đó là mấu chốt của toàn bộ hướng dẫn này.

Kết luận

Để có một phiên bản có thể chạy được và mã nguồn hoàn chỉnh cho hướng dẫn này, xin vui lòng tải về mã nguồn kèm theo bài này ở phía bên tay phải.

Tôi hy vọng rằng trong suốt bài hướng dẫn này, bạn đã học được một số kỹ năng và cách làm mới trong cách phát triển WordPress. Khi tìm hiểu loạt bài này, chúng ta đã khái quát rất nhiều thứ:

  • menu tùy biến
  • giới thiệu các trang quản trị
  • các kiểu thông báo khác nhau
  • xác định và tận dụng các hook tùy biến
  • và tái cấu trúc code theo hướng đối tượng

Như thường lệ, tôi cũng luôn luôn vui vẻ trả lời các câu hỏi thông qua phần bình luận, và bạn cũng có thể xem qua blog của tôi và theo dõi tôi trên Twitter. Tôi thường nói nhiều về việc phát triển phần mềm trong WordPress cũng như các chủ đề liên quan. Nếu bạn hứng thú với việc phát triển WordPress, đừng quên tìm đọc những loạt bài và hướng dẫn trước đây của tôi, và các tài liệu WordPress khác mà chúng tôi có ở đây trên Envato Tuts+.

Các nguồn tài nguyên

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.