2 개의 인수로 필터를 추가하는 방법은 무엇입니까?


9

다음 필터에서 $ path를 수정하고 싶습니다. 1 개의 입력과 2 개의 인수가 있습니다.

function documents_template( $template = '' ) {

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

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

이것은 필터를 추가하는 기능입니다. 오류 메시지가 표시됩니다. 올바르게 얻는 방법은 무엇입니까?

function my_template( $template = '' ){

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

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

반환 값을 다음과 같이 변경하려고 시도했지만 작동하지 않습니다.

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

아래 답변으로 새 필터가 여전히 작동하지 않으므로 필터가 클래스에 있기 때문일 수 있습니다. 완전히 새로운 코드는 다음과 같습니다.

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;
 }
}

답변:


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는 4 개의 변수를 사용합니다. 첫 번째와 두 번째가 필요합니다. 1. 필터 이름, 2. 기능 이름. 세 번째는 우선 순위입니다 (함수가 실행될 때). 그리고 네 번째는 매개 변수의 양입니다. 인수의 양을 정의하면 함수에 인수를 넣어야합니다. 예를 들어

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

필터가 더 많은 인수를 지원하는 경우 (이 경우 3)

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

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 );

이 코드는 저에게 효과적입니다. 이것을 시도 했습니까?


수업 변경시 :

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

에:

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

my_template 함수에 더 많은 입력을 추가해도 작동하지 않습니다.
Jenny

오류가 있습니까?
Rob Vermeer

예, 모든 오류는 동일합니다. call_user_func_array는 매개 변수 1이 유효한 콜백이 될 것으로 예상합니다. 배열에는 정확히 두 멤버가 있어야합니다.
Jenny

내 답변을 편집했습니다. 코드를 제거하면 오류가 사라집니다.
Rob Vermeer

예, 내 코드를 이것으로 바꾸고 여전히 작동하지 않습니다.
Jenny

2

일치해야하지만 그렇지는 않습니다.

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

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

document_template ! = documents_template

그렇지 않으면 모든 것이 올바르게 보입니다.

편집하다

모든 것이 올바르게 보이지는 않습니다. 콜백 함수 정의에 매개 변수를 추가하고 싶지 않다고 생각합니다. 대신, $template콜백 내에서 정의 하거나 수정하지 않고 다시 전달해야합니다. 따라서 이것을 교체하십시오 :

function my_template( $template = '' ){

... 이것으로 :

function my_template(){

예 :

function my_template(){

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

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

편집 2

좋아, 사소한 실수 콜백으로 사용해보십시오.

function my_template( $path, $template ){

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

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

'document'= 'documents'의 실수로 죄송합니다. 이제 새로운 기능으로 여전히 작동하지 않습니다. call_user_func_array는 매개 변수 1이 유효한 콜백이 될 것으로 예상합니다. 배열에는 정확히 두 멤버가 있어야합니다.
Jenny

내 실수; 당신은 콜백 함수 정의에 매개 변수를 추가해야합니다. 업데이트 된 답변을 참조하십시오.
칩 베넷

새 코드도 작동하지 않습니다. print_r을 시도했는데 경로가 올바른지 알 수 있습니다.
Jenny
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.