Học wordpress Giới thiệu về Hooks: Action & Filter

0
221

Một trang WordPress được tạo thành từ toàn bộ tải các hàm và truy vấn cơ sở dữ liệu, với WordPress và chủ đề phối hợp với nhau để xuất văn bản, hình ảnh, biểu định kiểu và các tệp khác. Trình duyệt diễn giải tất cả những điều này và đặt tất cả chúng lại với nhau thành một trang web.Trong toàn bộ mã của mình, WordPress đã bao gồm các hook, để mọi người có thể treo mã của riêng họ trên các hook đó. Có hai loại hook: action và filter.

  • Các hành động (actions) cho phép bạn học html thêm chức năng bổ sung tại một điểm cụ thể trong quá trình xử lý trang, ví dụ, người học html có thể muốn thêm các tiện ích hoặc menu bổ sung hoặc thêm thông báo quảng cáo vào trang của mình.
  • Các bộ lọc (filters) cho phép bạn chặn và sửa đổi dữ liệu vì nó được xử lý, ví dụ, bạn có thể muốn chèn một lớp CSS khác trong phần tử HTML của WordPress hoặc sửa đổi một số khối trang của mình.

Hành động Actions:

Chúng ta có thể làm điều này bằng cách móc vào một cái hook action. Nghĩa là, chúng ta có thể sử dụng hàm add_action (viết add_action ()) để thêm chức năng.Gửi Gill đến cửa hàng để lấy sơn có thể trông như thế này trong PHP:

  // Gửi Gill để lấy sơn
 add_action ('after_gill_arrive', 'send_gill_to_get_paint', 10, 2);
 chức năng send_gill_to_get_paint ($ gill_has_keys, $ gill_has_car) {
   // Nếu $ gill_has_keys và $ gill_has_car đều đúng
   if ($ gill_has_keys && $ gill_has_car) {
     echo 'Gill, xin vui lòng đến cửa hàng và lấy một ít sơn.  Cảm ơn bạn!';
   }
 } <br>

Chúng ta vừa làm gì ở đó?

  • Chúng tôi theo dõi một điều đặc biệt sẽ xảy ra. trong thuật ngữ lập trình, móc ‘after_gill_arrive’;
  • Khi nó xảy ra, chúng tôi đã làm một cái gì đó, chúng tôi đã gửi cô ấy đến cửa hàng để lấy sơn; trong thuật ngữ lập trình, chúng tôi đã thêm một hành động để gọi hàm send_gill_to_get_paint (), in một thông báo trên trang;
  • Chúng tôi đã sử dụng các đối số $ gill_has_keys và $ gill_has_car để thực hiện một số logic cơ bản;
  • Chúng tôi đặt thông tin khác:
    • Ưu tiên của hành động này: Cho dù nó sẽ chạy trước hay sau, các chức năng khác được gắn vào cùng một hook. Trong trường hợp này, chúng tôi đặt mức độ ưu tiên thành 10, mặc định. Nếu chúng ta muốn một hàm khác chạy trước hàm này, chúng ta sẽ cung cấp cho hàm kia một giá trị thấp hơn (có nghĩa là nó sẽ được thực thi trước).
    • Có bao nhiêu đối số (biến) mà hàm chấp nhận. Các đối số này được truyền từ hook hành động đến hàm của chúng ta. Trong trường hợp này, chúng tôi đặt giá trị này thành 2.

Làm thế nào nó hoạt động?

Nói một cách đơn giản, add_action () yêu cầu WordPress làm một cái gì đó khi nó đến hook do_action () đã chỉ định.Nhưng chúng tôi chỉ có thể sử dụng add_action () của chúng tôi trong ví dụ trên nếu chúng tôi biết rằng móc hành động ‘after_gill_arrive’ tồn tại trong chủ đề / plugin của chúng tôi. Chủ đề / plugin của chúng tôi cần phải có một cái gì đó như thế này trong đó:do_action (‘after_gill_arrive’, $ gill_has_keys = true, $ gill_has_car = true);Điều này bảo WordPress tạo một hook có tên ‘after_gill_arrive’, chạy mọi hành động được gắn vào hook này và chuyển các đối số $ gill_has_keys và $ gill_has_car cho các hành động đó (2 đối số chúng tôi đã chỉ định ở trên).

Một ví dụ add_action () đơn giản

Bây giờ hãy xem một ví dụ đơn giản sử về thêm một số văn bản sau tiêu đề:

  // Thêm một số văn bản sau tiêu đề
 add_action ('__after_header', 'add_promotional bản');
 hàm add_promotional bản () {
   // Nếu chúng tôi không ở trang chủ, không làm gì cả
   if (! is_front_page ())
     trở về;
   // Báo lại html
   echo "<div> Ưu đãi đặc biệt! Chỉ tháng 6: Sô cô la miễn phí cho mọi người! </ div>";
 } <br>

Bên trong mã lõi, là hành động cuối cùng trong tiêu đề.php có:

  do_action ('__after_header')

Đây là nơi add_action () của chúng ta đang tự móc. Người học wordpress cũng có thể sử dụng remove_action () để xóa các hành động khỏi hook của chúng. Ví dụ: đoạn mã này sẽ loại bỏ thanh trượt khỏi một nơi bằng cách sử dụng remove_action () để gỡ nó ra khỏi vị trí mà nó hiện đang móc nối và thêm nó vào một nơi khác.Và làm cách nào để thêm remove_action () vào mã của trang? Vâng, điều đó đúng: với add_action (). Trong trường hợp đoạn trích để di chuyển thanh trượt, chúng tôi nối chức năng của chúng tôi trong phần <head> ở đầu trang, để đảm bảo nó được thực thi sau khi tất cả các hành động được tải, nhưng trước khi phần còn lại của trang được tạo. Hãy xem đoạn trích thanh trượt đó để xem nó có ý nghĩa hơn với bạn bây giờ không.

Bộ lọc Filter:

Chúng tôi có thể thay đổi nhận xét khoe khoang của Jack bằng cách nối vào bộ lọc. Đó là, chúng ta có thể sử dụng add_filter () để sửa đổi chức năng Thay đổi công cụ thay đổi tại một điểm cụ thể.Giảm bớt sự kiêu hãnh của anh ta có thể trông như thế này trong PHP:

  // Cắt khoe khoang của Jack
 add_filter ('jacks_boast', 'cut_the_boasting');
 chức năng cut_the_boasting ($ khoe khoang) {
   // Thay thế "tốt nhất" bằng "tốt nhất thứ hai"
   $ boast = str numplace ("tốt nhất", "tốt nhất thứ hai", $ khoe khoang);
   // Nối một cụm từ khác vào cuối khoe khoang của anh ấy
   $ khoe khoang = $ khoe khoang.  'Tuy nhiên, Gill có thể thuê tôi bất cứ ngày nào.';
   trả lại $ khoe khoang;
 } <br>

Chúng ta vừa làm gì ở đó?

  • Chúng tôi đã tìm kiếm một điều đặc biệt mà chúng tôi muốn thay đổi sự tự hào của anh chàng Jack Jack rằng anh ấy là người giỏi nhất; trong thuật ngữ lập trình, bộ lọc ‘jacks_boast’;
  • Khi chúng tôi tìm thấy nó, chúng tôi đã thay đổi nó, chúng tôi đã thay đổi cách tốt nhất thành một thành viên giỏi thứ hai và chúng tôi đã thêm một cụm từ khác vào cuối; trong thuật ngữ lập trình, chúng tôi đã lọc đầu ra bằng cách gọi hàm cut_the_boasting (), đã thay thế một phần của chuỗi và nối thêm một chuỗi khác (ký tự., ký tự nối hai chuỗi PHP);
  • Chúng tôi đã sử dụng đối số $ khoe khoang (trong trường hợp này là một chuỗi có nội dung giống như tôi là người giỏi nhất! Tiết) làm cơ sở cho những thay đổi của chúng tôi.
  • Chúng tôi trả về một chuỗi ở cuối hàm. Cái này rất quan trọng. Nếu bạn không trả về một chuỗi trong bộ lọc, bạn có thể làm gián đoạn chức năng của chương trình (trong trường hợp này, chúng tôi chỉ đơn giản là im lặng Jack Thay, đây có thể không phải là điều xấu).

Làm thế nào nó hoạt động?

Nói một cách đơn giản, add_filter () yêu cầu WordPress trao đổi dữ liệu của mình với dữ liệu của Hoang linh web khi đến móc lọc bộ lọc ‘jacks_boast’. Khéo léo!Nhưng chúng tôi chỉ có thể sử dụng bộ lọc add_filter () trong ví dụ trên nếu chúng tôi biết rằng móc bộ lọc ‘jacks_boast’ tồn tại trong chủ đề / plugin của chúng tôi. (Nếu hook không tồn tại, chức năng của chúng tôi sẽ không bao giờ được gọi.) Phía sau hậu trường, chủ đề / plugin phải có một cái gì đó như thế này trong đó:

  echo áp dụng_filters ('jacks_boast', "Tôi là người giỏi nhất thế giới.");

Điều này nói với WordPress để tạo ra một hook có tên ‘jacks_boast’, áp dụng bất kỳ bộ lọc nào được gắn vào hook này và vượt qua các bộ lọc đó, chuỗi Tôi là tốt nhất trên thế giới. Nếu không có bộ lọc nào được gắn vào hook, thì hàm application_filters () sẽ đơn giản trả về chuỗi mã hóa Tôi là tốt nhất trên thế giới.

Một ví dụ add_filter () đơn giản

Bây giờ hãy xem một ví dụ dễ dàng trong chủ đề. Hãy thay đổi url của liên kết trong logo:

  // Thay đổi url được liên kết từ logo
 add_filter ('tc_logo_link_url', 'change_site_main_link');
 hàm thay đổi_site_main_link () {
   trả lại 'http://example.com';
 } <br>

Bên trong mã lõi, trong chức năng hiển thị logo (trong class-header-header_main.php) có:

  áp dụng_filters ('tc_logo_link_url', esc_url (home_url ('/')))

Đây là nơi add_filter () của chúng ta đang tự móc. Hàm esc_url () loại bỏ các ký tự không hợp lệ, v.v. trong url và hàm home_url () lấy url nhà cho trang web. Vì vậy, không có bất kỳ bộ lọc nào, bộ lọc ‘tc_logo_link_url’ trả về địa chỉ của trang chủ.Trong ví dụ này, chúng tôi thậm chí không nhận được bất kỳ thông báo nào về các đối số đến (url nhà), bởi vì chúng tôi biết rằng chúng tôi sẽ hoàn toàn ghi đè lên nó.Hãy nhớ rằng: Khi bạn sử dụng bộ lọc, bạn phải luôn trả lại một cái gì đó.

Tại sao nên sử dụng hooks?

Bây giờ người học wordpress biết cách chúng hoạt động, bạn có thể thấy rằng việc hiểu móc là hoàn toàn cần thiết cho bất kỳ ai phát triển với WordPress. Nó cũng rất hữu ích ngay cả khi bạn không phải là nhà phát triển nhưng muốn sửa đổi hành vi của WordPress hoặc hành vi của chủ đề của bạn.Với sự hiểu biết về móc, bạn có thể:

  • Thay đổi hầu hết mọi thứ trong WordPress ngay cả những điều khá cơ bản, vì rất nhiều chức năng cốt lõi của WordPress sử dụng các hành động và bộ lọc;
  • Thực hiện các thay đổi dễ dàng: một khi bạn đã hiểu các khái niệm, bạn có thể thực hiện một số thay đổi cực kỳ phức tạp rất nhanh;
  • Thay đổi hành vi của một chủ đề tại nguồn, thay vì cố gắng phù hợp với một giải pháp không phù hợp với HTML và CSS;
  • Làm cho các thay đổi của riêng bạn dễ hiểu và dễ gỡ lỗi hơn, vì mã của bạn được giảm đến mức tối thiểu;
  • Kích hoạt và vô hiệu hóa các thay đổi của bạn một cách dễ dàng vì mỗi đoạn mã là một đơn vị nhỏ trong hàm.php của bạn;
  • Thực hiện các thay đổi của bạn tương đối bằng chứng nâng cấp vì bạn không còn cần phải chỉnh sửa hoặc sao chép WordPress hoặc bất kỳ chủ đề và plugin tập tin cốt lõi nào;
  • Chia sẻ kiến ​​thức của bạn và trao đổi đoạn mã với người khác.

Móc hoàn toàn hiểu có thể mất một vài giờ hoặc (nhiều) lâu hơn, tùy thuộc vào kỹ năng của bạn, nhưng nó sẽ giúp bạn tiết kiệm nhiều ngày trong tương lai.

Tất cả các ví dụ trên là ví dụ làm việc. Nếu người học wordpress đã cài đặt thử nghiệm WordPress để chơi, bạn có thể thử sử dụng mã ở trên trong tệp.php trong chủ đề con của bạn. Một số điều cần lưu ý:

  • Trong ví dụ add_action () lặp lại văn bản cho Gill: 
    • Bạn sẽ cần bao gồm dòng do_action (‘after_gill_arrive’, $ gill_has_keys = true, $ gill_has_car = true);trong mã của bạn, bởi vì hook hành động này không có trong Customizr.
    • Nếu cả $ gill_has_keys và $ gill_has_car đều được đặt thành đúng, thì trang web của bạn sẽ hiển thị trên đường phố Gill Gill, vui lòng đến cửa hàng và lấy một ít sơn. Cảm ơn bạn! Ở đầu trang. Nếu bạn thay đổi một hoặc cả hai giá trị này thành false, thông báo sẽ không hiển thị.
  • Trong ví dụ add_action () để thêm văn bản quảng cáo: Không bao gồm móc ‘__after_header’ trong mã của bạn, bởi vì điều này đã được bao gồm trong mã lõi của Customizr.
  • Trong ví dụ add_filter () thay đổi các từ của Jack: 
    • Bạn sẽ cần bao gồm dòng echo application_filters (‘jacks_boast’, ‘Tôi là người giỏi nhất thế giới. Rằng);trong mã của bạn, bởi vì móc lọc này không có trong Customizr.
    • Trang web của bạn sẽ hiển thị tôi là người giỏi thứ hai trên thế giới. Tuy nhiên, Gill có thể thuê tôi hơn bất cứ ngày nào. Ở đầu trang.
  • Trong ví dụ add_filter () để thay đổi url logo: Không bao gồm móc lọc ‘tc_logo_link_url’ trong mã của bạn, bởi vì điều này đã được bao gồm trong mã lõi của Customizr.

Nơi để sao chép / dán mã này?

Trong tập tin tests.php của bạn. Chúng tôi khuyên bạn nên tạo một chủ đề con.Hãy nhớ rằng: bạn không nên chỉnh sửa các chức năng của chủ đề.php, cũng như không nên đặt một bản sao của chủ đề đó vào chủ đề con của bạn.

Hooks trong WordPress về cơ bản cho phép người học wordpress thao tác mã mà không cần chỉnh sửa các tệp cốt lõi. Chúng được sử dụng rộng rãi trong suốt WordPress và WP Club Manager và rất hữu ích cho các nhà phát triển.

Có hai loại hook: action và filter.

Action Hook cho phép người học wordpress chèn mã tùy chỉnh tại nhiều điểm khác nhau (bất cứ nơi nào hook được chạy).

filter cho phép bạn thao tác và trả về một biến mà nó đi qua.

Nếu bạn sử dụng một hook để thêm hoặc thao tác mã, bạn có thể thêm mã tùy chỉnh vào tệp tin.php của chủ đề.

Sử dụng action hooks

Để thực thi mã của riêng bạn, bạn móc vào bằng cách sử dụng hook hành động do_action( 'action_name' ); . Xem bên dưới để biết ví dụ về nơi đặt mã của bạn:

  add_action ('action_name', 'your_feft_name');
 chức năng your_feft_name () {
	 // Ma cua ban
 }

Sử dụng filter hook

Các filter hook được gọi là mã bằng cách sử dụng apply_filter( 'filter_name', $variable ); . Để thao tác với biến đã qua, bạn có thể thực hiện một số thao tác như sau:

  add_filter ('filter_name', 'your_feft_name');
 chức năng your_feft_name ($ biến) {
	 // Ma cua ban
	
	 trả về biến $;
 }

Với các bộ lọc, bạn phải trả về một giá trị.

Để tìm hiểu thêm về các tùy chọn sử dụng hooks và filter, hãy xem phần tài liệu học wordpress của Hoang linh web

LEAVE A REPLY

Please enter your comment!
Please enter your name here