apply_filters () 이해 문제


19

apply_filters ()에서

apply_filters( $tag, $value, $var ... );

$value와에 머리를 감는 데 문제가 $var있습니다. 코덱을 읽었으며 $value수정 할 수 $var없는 것처럼 들리지만 야생에서 이것에 대한 예를 찾지 못했습니다. 변수를 전달하는 방법으로 사용되는 것 같습니다. 어떤 경우에, 그것과 $var? 의 차이점은 무엇 입니까?

답변:


35

더 나은 이름으로 함수를 확인하십시오.

apply_filters(
    $filter_name,     // used for add_filter( $filter_name, 'callback' );
    $value_to_change, // the only variable whose value you can change
    $context_1,       // context
    $context_2        // more context
);

따라서 해당 함수가 다음과 같이 호출되면

// wp-login.php line 94
apply_filters( 'login_body_class', $classes, $action );

당신이 사용할 수있는 …

add_filter( 'login_body_class', 'function_to_change_login_body_class', 10, 2 );

… 그리고 그 함수에 전달 된 두 개의 변수를 얻습니다. 첫 번째를 반환하면 두 번째는 더 많은 컨텍스트를 제공합니다.

function function_to_change_login_body_class( $classes, $action )
{
    if ( 'login' === $action )
        $classes[] = 'foo';

    if ( 'postpass' === $action )
        $classes[] = 'bar';

    return $classes;
}

추가 변수는 의사 결정을 쉽게하고 변경하지 않도록하기위한 것입니다.


내가 올바르게 이해한다면. apply_filters에서 $ value_to_change에 자동으로 적용되는 반환 값을 수집하는 변수를 추가하지 않습니까?
r00tAcc3ss

@ r00tAcc3ss 아무것도 자동으로 발생하지 않습니다. 콜백에서 값을 변경해야합니다. 컨텍스트에 따라 원하는 경우 변경하지 않고 반환 할 수도 있습니다.
fuxia

오 예. 나는 반환 된 값을 다른 변수에 받아들이고 $ value에 할당 할 필요가 없다는 것을 의미했습니다. 후크 된 함수에서 $ value를 변경하고 "자동으로"반환하면됩니다.
r00tAcc3ss

11

필터 란 무엇입니까?

필터 는 데이터에 대한 작업을 수행하기 직전에 (예 : 데이터베이스에 추가하거나 브라우저 화면에 보내는 등) 특정 시점에 WordPress에서 데이터를 전달하는 기능입니다. 필터는 데이터베이스와 브라우저 사이 (WordPress가 페이지를 생성 할 때)와 브라우저와 데이터베이스 사이에 있습니다 (WordPress가 새 게시물과 주석을 데이터베이스에 추가 할 때). WordPress의 대부분의 입력 및 출력은 하나 이상의 필터를 통과합니다. WordPress는 기본적으로 일부 필터링을 수행하며 플러그인은 자체 필터링을 추가 할 수 있습니다.

필터에 연결

사용자가 일부 특정 데이터 (값, 함수의 출력 등)를 변경할 수 있도록 필터 후크는 apply_filters기능을 통해 제공됩니다 .
이러한 필터 후크에는 필터의 이름 (또는 태그 )과 데이터 를 필터링 (즉, 어떤 방식 으로든 변경)하는 데 사용되는 기능 이름이 포함됩니다 .

게시물 제목을 변경하려면 the_title다음과 같이 정의 된 필터 후크를 사용할 수 있습니다 .

apply_filters( 'the_title', $title, $id );

즉, 필터에 tag / name the_title이 있고 첫 번째 매개 변수 $title는 변경 될 데이터 (예 : 게시물 제목)이고 두 번째 매개 변수 $id는 추가 정보 (이 경우 게시물 ID)입니다.

예를 들어 대문자 로 모든 게시물제목 을 표시하려면 다음 줄을 사용할 수 있습니다.

add_filter('the_title', 'strtoupper');

우리는 한 번 봐 걸릴 경우 add_filter기능을, 우리는 다음과 같이 정의된다 참조 :

add_filter( $tag, $function_to_add, $priority, $accepted_args );

첫 번째 및 두 번째 (필수) 매개 변수 만 지정했지만 세 번째 및 네 번째 매개 변수는 각각의 기본값 (예 : 101)으로 설정되었습니다.

더 복잡한 필터

당신이 원하는 경우 에만 특정 게시물을 필터링 , 당신은 (다음 ID이 필터의 경우) 추가 정보를 사용할 수 있습니다. 이렇게하려면 매개 변수 수 (이 경우 2)를 지정해야하며,이를 다시 수행하려면 우선 순위 매개 변수 (인수 수 앞에 오는)를 지정해야합니다.

ID가 42 인 게시물의 제목에만 영향을 주려고한다고 가정하면 다음과 같습니다.

add_filter('the_title', 'my_strtoupper', 10, 2);
function my_strtoupper($title, $id) {
    if (42 === $id) return strtoupper($title);
    return $title;
} // function my_strtoupper

이 경우 사용 가능한 4 개의 매개 변수를 모두 지정해야합니다.

어떤 매개 변수가 있습니까?

특정 필터의 사용 가능한 매개 변수 수를 식별하려면 정의 된 위치 (이 경우 : here ) 를 찾아야합니다 .


참고 문헌 :


2
철저한 반응과 완벽한 수업을 위해 +1!
bosco

고마워, 그것은 매우 철저하지만 실제로 내가 무엇을 물어 설명하지 않습니다. 예. 필터에서 $ value 변수와 $ var 변수의 차이
r00tAcc3ss

흠, 나는 말할 것입니다. 물론 그것은 내 주관적인 느낌입니다. 그래도 필터와 매개 변수에 대한 정보를 추가하겠습니다.
tfrommen
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.