Làm thế nào để thêm bộ lọc với 2 args?


9

Tôi muốn sửa đổi đường dẫn $ trong bộ lọc sau. Nó có 1 đầu vào và 2 args.

function documents_template( $template = '' ) {

       $path = DOCUMENTS_INCLUDES_DIR . '/document/' . $template;

  return apply_filters( 'document_template', $path, $template );
}

Đây là chức năng của tôi để thêm bộ lọc, nó nhận được thông báo lỗi, làm thế nào để có nó đúng không?

function my_template( $template = '' ){

      $path = MY_INCLUDES_DIR . '/document/'. $template;

     return $path;
}
add_filter( 'document_template','my_template', 10, 2 );

Tôi đã cố gắng thay đổi giá trị trả lại của mình như sau, nó cũng không hoạt động:

return apply_filters( 'my_template', $path, $template);

Với các câu trả lời bên dưới, bộ lọc mới của tôi vẫn không hoạt động, vì vậy, có thể đó là do bộ lọc của tôi nằm trong một lớp? đây là mã hoàn toàn mới:

Class My_Class{
  function __construct() {
     add_filter( 'document_template', array( $this, 'my_template',10, 2 ) );
  }
 function my_template( $path, $template ){

      $path = MY_INCLUDES_DIR . '/document/'. $template;

     return $path;
 }
}

Câu trả lời:


10
function my_locate_template( $path, $template ){

      $path = MY_INCLUDES_DIR . '/document/'. $template;

     return $path;
}
add_filter( 'documents_template','my_locate_template', 10, 2 );

add_filter có 4 biến. Đầu tiên và thứ hai là bắt buộc. 1. tên của bộ lọc, 2. tên của hàm. Thứ ba là ưu tiên (khi nào chức năng được kích hoạt). Và thứ tư là số lượng tham số. Nếu bạn xác định số lượng đối số, bạn cũng phải đặt chúng vào hàm của mình. Ví dụ,

add_filter( 'the_filter','your_function', 10, 1 );
function your_function($var1) {
   // Do something
}

Nếu bộ lọc hỗ trợ nhiều đối số hơn (trong trường hợp này là 3)

   add_filter( 'the_filter','your_function', 10, 3 );
    function your_function($var1, $var2, $var3) {
       // Do somthing
    }

Đọc tất cả các mã để biết thông tin về add_filter ()


function documents_template( $template = '' ) {

       $path = DOCUMENTS_INCLUDES_DIR . '/document/' . $template;

  return apply_filters( 'document_template', $path, $template );
}

function my_template( $path, $template ){

      $path = MY_INCLUDES_DIR . '/document/'. $template;

     return $path;
}
add_filter( 'document_template','my_template', 10, 2 );

Mã này làm việc cho tôi. Bạn đã thử điều này?


Trong lớp của bạn thay đổi:

add_filter( 'document_template', array( $this, 'my_template',10, 2 ) );

đến:

add_filter( 'document_template', array( $this, 'my_template'), 10, 2  );

thêm đầu vào trong hàm my_template cũng không hoạt động.
Jenny

Bạn có mắc lỗi gì không?
Rob Vermeer

có, tất cả các lỗi đều giống nhau: call_user_func_array dự kiến ​​tham số 1 sẽ là một cuộc gọi lại hợp lệ, mảng phải có chính xác hai thành viên
Jenny

Tôi chỉnh sửa câu trả lời của tôi. Nếu bạn loại bỏ mã của bạn, lỗi đã biến mất, phải không?
Rob Vermeer

vâng, tôi thay thế mã của tôi bằng cái này, vẫn không hoạt động.
Jenny

2

Những điều này cần phải khớp, nhưng không:

apply_filters( 'document_template', $path, $template );

add_filter( 'documents_template','my_template', 10, 2 );

document_template ! = documents_template

Nếu không, mọi thứ có vẻ đúng.

Biên tập

Chờ đã, không phải mọi thứ đều đúng. Tôi không nghĩ rằng bạn muốn thêm một tham số cho định nghĩa hàm gọi lại của bạn. Thay vào đó, bạn cần xác định $templatetrong vòng gọi lại, hoặc đơn giản là chuyển nó trở lại không sửa đổi. Vì vậy, thay thế này:

function my_template( $template = '' ){

...Với cái này:

function my_template(){

ví dụ:

function my_template(){

      $path = MY_INCLUDES_DIR . '/document/'. $template;

     return $path;
}
add_filter( 'documents_template','my_template', 10, 2 );

Chỉnh sửa 2

Được rồi, lỗi nhỏ về phía tôi. Hãy thử điều này như cuộc gọi lại của bạn:

function my_template( $path, $template ){

      $path = MY_INCLUDES_DIR . '/document/'. $template;

     return $path;
}
add_filter( 'documents_template','my_template', 10, 2 );

xin lỗi vì sai lầm của 'tài liệu' = 'tài liệu'. Bây giờ với chức năng mới của bạn, nó vẫn không hoạt động. lỗi cho biết call_user_func_array dự kiến ​​tham số 1 là một cuộc gọi lại hợp lệ, mảng phải có chính xác hai thành viên
Jenny

Lỗi của tôi; bạn làm cần phải thêm tham số để định nghĩa hàm callback. Xem câu trả lời cập nhật.
Chip Bennett

Mã mới cũng không hoạt động. Tôi đã thử print_r, có thể thấy đường dẫn của tôi là chính xác.
Jenny
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.