Làm cách nào để thêm bộ lọc vào hook?

Móc bộ lọc là một trong những tính năng mạnh mẽ hơn của WordPress giúp cung cấp mức độ linh hoạt rất lớn khi sửa đổi WordPress, bao gồm các chủ đề và plugin tùy chỉnh. Có thể dễ dàng có hàng trăm hướng dẫn độc đáo khác nhau về cách sử dụng các bộ lọc trong chủ đề và plugin, đơn giản là vì có rất nhiều thứ bạn có thể làm với chúng. Trong hướng dẫn nhanh này, tôi sẽ chỉ cung cấp cho bạn một ví dụ đơn giản minh họa chức năng của móc lọc

Có bốn chức năng cốt lõi chính mà bạn sẽ thường sử dụng khi làm việc với các bộ lọc

  • add_filter[] – dùng để thêm bộ lọc tùy chỉnh mới
  • remove_filter[] – dùng để xóa bộ lọc đã đăng ký
  • apply_filters[] – chạy dữ liệu được cung cấp thông qua bộ lọc được chỉ định
  • has_filter[] – kiểm tra xem một bộ lọc cụ thể đã được đăng ký hay chưa

Bạn có thể coi bộ lọc là một phương pháp để sửa đổi dữ liệu. Lấy ví dụ, danh sách các loại trái cây sau đây

  • táo
  • những quả cam
  • quả quất
  • thanh long
  • trái đào
  • sầu riêng

Danh sách các loại trái cây này được hiển thị trên một trong các trang WordPress của chúng tôi với chức năng như thế này

function pippin_show_fruits[] {
	$fruits = array[
		'apples',
		'oranges',
		'kumkwats',
		'dragon fruit',
		'peaches',
		'durians'
	];
	$list = '
    ';   foreach[$fruits as $fruit] : $list .= '
  • ' . $fruit . '
  • '
    ; endforeach;   $list .= '
'
;   return $list; }   echo pippin_show_fruits[];

function pippin_show_fruits[] { $fruits = array[ 'apples', 'oranges', 'kumkwats', 'dragon fruit', 'peaches', 'durians' ]; $list = '

    '; foreach[$fruits as $fruit] : $list .= '
  • ' . $fruit . '
  • '; endforeach; $list .= '
'; return $list; } echo pippin_show_fruits[];

Chà, nếu chúng ta muốn sửa đổi danh sách các loại trái cây được hiển thị thông qua một plugin thì sao? . Chúng ta có thể làm điều đó như thế này

function pippin_show_fruits[] {
	$fruits = array[
		'apples',
		'oranges',
		'kumkwats',
		'dragon fruit',
		'peaches',
		'durians'
	];
	$list = '
    ';   if[has_filter['pippin_add_fruits']] { $fruits = apply_filters['pippin_add_fruits', $fruits]; }   foreach[$fruits as $fruit] : $list .= '
  • ' . $fruit . '
  • '
    ; endforeach;   $list .= '
'
;   return $list; }

function pippin_show_fruits[] { $fruits = array[ 'apples', 'oranges', 'kumkwats', 'dragon fruit', 'peaches', 'durians' ]; $list = '

    '; if[has_filter['pippin_add_fruits']] { $fruits = apply_filters['pippin_add_fruits', $fruits]; } foreach[$fruits as $fruit] : $list .= '
  • ' . $fruit . '
  • '; endforeach; $list .= '
'; return $list; }

Ở dòng 12, chúng tôi thực hiện một kiểm tra đơn giản để xem liệu bộ lọc “pippin_add_fruits” của chúng tôi [mà chúng tôi sẽ tạo trong giây lát] có tồn tại không. Nếu nó tồn tại, thì chúng tôi áp dụng bộ lọc đó cho mảng của mình

Vậy điều gì sẽ xảy ra khi chúng ta áp dụng bộ lọc cho mảng trái cây của mình? . Chúng tôi có thể loại bỏ trái cây một cách có chọn lọc, chúng tôi có thể thay đổi tên của chúng, chúng tôi có thể thêm trái cây, v.v. Trong ví dụ này, tôi sẽ chỉ thêm trái cây bổ sung vào danh sách

Đầu tiên, chúng tôi thiết lập chức năng lọc của mình như thế này

function pippin_add_extra_fruits[$fruits] {
	// the $fruits parameter is an array of all fruits from the pippin_show_fruits[] function
 
	return $fruits;
}
add_filter['pippin_add_fruits', 'pippin_add_extra_fruits'];

function pippin_add_extra_fruits[$fruits] { // tham số $fruits là một mảng gồm tất cả các loại trái cây từ hàm pippin_show_fruits[] return $fruits;

Mảng trái cây được tạo trong hàm pippin_show_fruits[] của chúng ta được truyền dưới dạng tham số. Vì đây là một mảng của tất cả các loại trái cây, chúng ta có thể làm bất cứ điều gì chúng ta muốn với nó. Khi kết thúc hàm, chúng ta phải trả về mảng $fruits, nếu không chúng ta sẽ kết thúc với một mảng trống

Vì vậy, để thêm các loại trái cây bổ sung vào danh sách của chúng tôi, chúng tôi có thể làm điều này

function pippin_add_extra_fruits[$fruits] {
	// the $fruits parameter is an array of all fruits from the pippin_show_fruits[] function
 
	$extra_fruits = array[
		'plums',
		'kiwis',
		'tangerines',
		'pepino melons'
	];
 
	// combine the two arrays
	$fruits = array_merge[$extra_fruits, $fruits];
 
	return $fruits;
}
add_filter['pippin_add_fruits', 'pippin_add_extra_fruits'];

function pippin_add_extra_fruits[$fruits] { // tham số $fruits là một mảng gồm tất cả các loại trái cây từ pippin_show_fruits[] function $extra_fruits = array[ 'plums', 'kiwis', 'quýt', 'dưa pepino' ];

Khi hàm pippin_display_fruits[] của chúng ta hiển thị danh sách các loại trái cây, bây giờ chúng ta sẽ thấy điều này

  • táo
  • những quả cam
  • quả quất
  • thanh long
  • trái đào
  • sầu riêng
  • mận
  • Trái kiwi
  • quýt
  • dưa pepino

Vì vậy, đây là những gì đang thực sự xảy ra. Trong hàm pippin_display_fruits[], chúng tôi thiết lập mảng trái cây ban đầu, sau đó, nếu bộ lọc tồn tại, chúng tôi chuyển mảng trái cây đó qua hàm bộ lọc của mình. Điều này được thực hiện với hook apply_filters[]. Hàm pippin_add_extra_fruits[] sau đó lấy mảng $fruits và sửa đổi nó. Sau khi sửa đổi hoàn tất, mảng được trả về hàm pippin_display_fruits[], hàm này sẽ lặp qua từng mục trong mảng và hiển thị chúng

Ví dụ thế giới thực

Các hook bộ lọc, gần như chính xác như thế này, là những gì tôi đã sử dụng trong các plugin Loại nội dung dễ dàng và phần bổ sung Loại trường meta phần thưởng ECPT của mình. Móc bộ lọc đã được sử dụng để đăng ký các loại trường meta bổ sung thông qua plugin thứ hai. Bên trong các chức năng thiết lập trường meta, trong Loại nội dung dễ dàng, là một bộ lọc có thể được sử dụng bởi các plugin khác, chẳng hạn như plugin loại trường meta bổ sung, để đăng ký các loại trường meta bổ sung

Một trong những điều thú vị về bộ lọc là bạn có thể sử dụng chúng để cung cấp “giao diện” cho những người dùng khác sửa đổi/nâng cao plugin của bạn mà không yêu cầu họ sửa đổi mã của plugin gốc

Chủ Đề