it-swarm-vi.tech

Bạn có phải là người hay không, ví dụ như thế của current_filter () không?

Đây có phải là một ví dụ hay về việc sử dụng current_filter() ?

<?php
add_filter("_my_filter", "common_function");
add_filter("_another_filter", "common_function");
function common_function(){
  $currentFilter = current_filter();
  switch ($currentFilter) {
    case '_my_filter':
      echo "Called by My Filter";
      break;
    case '_another_filter':
      echo "Called by another filter";
      break;
  }
}

Vì vậy, tôi đoán current_filter() được sử dụng để lấy tên của bộ lọc mà việc thực thi hiện tại đang diễn ra?

3
rsman

Xin chào @ Raj Sekharan :

Có vẻ tốt với tôi, nhưng muốn biết cách sử dụng hiện tại thực sự là câu hỏi của bạn hoặc bạn có muốn hiểu current_filter() lấy thông tin từ đâu không?

Nếu sau này, đây là những gì xảy ra trong tất cả các chức năng xử lý hook khác nhau, ví dụ: do_action(), apply_filters(), do_action_ref_array(), apply_filters_ref_array() ( rất nhiều được đơn giản hóa, tất nhiên):

<?php
function <process_hook>($hook, $value) {
  global $wp_filter, $wp_current_filter;
  $wp_current_filter[] = $hook;  // "Push" the hook onto the stack.
  $value = call_user_func($wp_filter[$hook]['function'],$value);
  array_pop($wp_current_filter);
  return $value;
}

Sau đó, tất cả những gì current_filter() làm là lấy cái móc cuối cùng "được đẩy"lên mảng wp_current_filter toàn cầu, tức là:

<?php
function current_filter() {
  global $wp_current_filter;
  return end( $wp_current_filter );
}
5
MikeSchinkel

Nói chung, có, đây là một cách sử dụng hợp lệ. Nếu tôi là bạn, tôi sẽ chuyển các hàm khác nhau cho các bộ lọc khác nhau và trừu tượng các phần chung trong các hàm khác.

Bằng cách này, bất kỳ chức năng của bạn sẽ làm chính xác một điều.

0
Nikolay