it-swarm-ko.tech

언제 remove_filter가 작동하지 않습니까?

일부 상황에서는 remove_filter가 작동하지 않으며 대안 을 제공해야한다고하는 보고서가 있습니다. 그러나 어떤 상황에서 이런 일이 벌어 지는지는 분명하지 않습니다.

WordPress 및 PHP 버전 및 최종적으로 다른 관련 정보와 함께 remove_filter를 중단시킬 코드 예제를 찾고 있습니다. 다음 스 니펫은 유용한 템플릿이어야한다고 생각합니다.

<?php
include('wp-load.php');

function filtertest_function($value)
{
    return 'Filtered';
}

var_dump(apply_filters('filtertest', 'Original value'));
add_filter('filtertest', 'filtertest_function');
var_dump(apply_filters('filtertest', 'Original value'));
remove_filter('filtertest', 'filtertest_function');
var_dump(apply_filters('filtertest', 'Original value'));

이렇게하면 예상 값이 반환됩니다.

string(14) "Original value"
string(8) "Filtered"
string(14) "Original value"

필터가 클래스의 일부이거나 여러 필터가 사용되는 경우에 오류가 발생한다고 생각합니다. 나는 이해한다 _wp_filter_build_unique_id이 관련되어있다 . 해당 코드에서 오류의 원인을 지적하십시오.

3
Jan Fabry

그럼 이것은 어떻게 든 Wordpress 개발 문제에 묶여있는 매우 구체적인 주제입니다. 나는 당신이 내 기사를 좋아한다면 trac 티켓을 추적 할 것을 강력하게 제안한다. 그게 당신이 할 수있는 최선의 일입니다. 문제가 발생했을 때 기술적으로 우회하는 방법을 찾아내는 것으로 가정합니다. remove_filter() - 대답).

이론적 인 관점에서 보자 : 모든 가능한 값 (f (n)! = f (n))에서 동일한 기능을 보장하기 위해 사용 된 데이터 유형이 엄격하게 처리되지 않는다는 것입니다. 즉, 깨진 디자인.

이것은 실제로 그것이 항상 깨질 것이라는 것을 의미합니까? - 아니! 때때로 그것은 때때로 일어날 수 있습니다. 그리고 remove_filter()에 의지해야 할 때 덫에 걸리게됩니다.

더 좋은 제안은 다음과 같습니다 : 훅을 클래스 메소드로 사용하는 플러그인을 개발하는 경우, PHP 5.2/5.3이있는 설치에서 플러그인이 실행되도록하십시오.

기술 토론은 trac 티켓에 보관하십시오. 그리고 관심이 있다면 현재 디자인의 단점을 해결하십시오.

3
hakre

Denis가 Hakre의 블로그에 댓글을 달았 기 때문에 이것은 매우 기본적인 문제의 예입니다.

function run_me_once() {
    remove_action( 'foobar', 'run_me_once' );
    echo 'test....';
}
add_action( 'foobar', 'run_me_once' );

function run_me2() {
    echo 'test2....';
}
add_action( 'foobar', 'run_me2', 11 );

echo '';
do_action( 'foobar' ); // test....
echo '';
echo '';
do_action( 'foobar' ); // test2....
echo '';

그 코드를 실행하기 전에, 결과를 기대하는 것이 무엇인지 물어보십시오. 결과가 무엇인지 결정했으면 실행하고 어떻게되는지 확인합니다.

1
t31os