WordPress 후크의 익명 함수
WordPress 후크는 다음 두 가지 방법으로 사용할 수 있습니다.
콜백 함수 이름 및 해당 함수 사용
add_action( 'action_name', 'callback_function_name' ); function callback_function_name() { // do something }
익명 기능 사용(닫기)
add_action( 'action_name', function() { // do something } );
WordPress 사용방법에 차이가 있습니까?선호하는 방법과 이유는 무엇입니까?
anonymous 함수의 단점은 remove_action을 사용하여 액션을 제거할 수 없다는 것입니다.
중요:후크를 제거하려면$function_to_remove
그리고.$priority
인수는 후크가 추가된 시간과 일치해야 합니다.이는 필터와 액션 모두에 적용됩니다.제거 실패 시 경고가 표시되지 않습니다.
당신이 정의하지 않았기 때문에function_to_remove
제거할 수 없습니다.
따라서 다른 사용자가 덮어쓸 수 있는 이 내부 플러그인이나 테마는 사용하지 마십시오.
closure를 사용하면 글로벌 네임스페이스를 깨끗하게 유지할 수 있습니다.콜백으로 전달하기 위해 먼저 글로벌 함수를 작성할 필요가 없기 때문입니다.
add_action('admin_init', function () {
// some code...
});
개인적으로 다음과 같은 경우를 제외하고 폐쇄를 콜백으로 사용하는 것을 선호합니다.
- 콜백을 삭제할 수 있습니다.
- 콜백 기능을 여러 번 사용해야 합니다.
- 이전 PHP 버전(5.3 미만)에 대한 지원이 필요합니다.
수업 중 휴업
폐쇄는 또한 수업 내에서 유익할 수 있다.
class SomeClass
{
public function __construct()
{
add_action('wp_head', function () {
$this->addSomeStyling();
});
}
protected function addSomeStyling()
{
echo '<style> body { color: #999; } </style>';
}
}
보통 콜백 방식은 공개해야 하지만 이 경우 비공개로 하거나 보호할 수도 있습니다.
이 솔루션은 PHP 5.4+에서만 작동합니다.PHP 5.3에서도 동작하도록 하려면 , 명시적으로 패스 할 필요가 있습니다.$this
다음과 같은 폐쇄에 대한 객체 참조:
public function __construct()
{
$self = $this;
add_action('wp_head', function () use ($self) {
$self->addSomeStyling();
});
}
좀 더 정확히 말하면, 현재 워드프레스 문서에서 추가하고자 합니다. 실제로 이것이 사용 사례에 따라 어떻게 달라지는지를 보여 주기 위해:
왜 여기서 명명된 함수를 [Ajax 액션 훅 콜백][...]로 사용하는 거죠?폐쇄는 최근에야 PHP에서 지원되기 때문에 [...] 일부 사용자가 이전 버전의 PHP를 아직 실행하고 있을 수 있기 때문에 호환성을 최대화하기 위해 항상 명명된 함수를 사용합니다.만약 당신이 최신 PHP 버전을 가지고 있고 당신만의 설치만을 위해 개발한다면, 원한다면 클로저를 사용하세요."
두 가지 모두 사용할 수 있습니다.하지만 익명의 기능을 사용하면 두 가지 큰 단점이 있습니다.
- 필요한 경우 후크를 제거할 수 없습니다.따라서 테마 또는 플러그인이 충돌하여 후크 사용을 삭제하려고 하면 다음과 같이 할 수 없습니다.
remove_action()
★★★★★★★★★★★★★★★★★」remove_filter()
에는 함수 이름이 파라미터로 필요한데 이 방법은 없습니다. - 익명 함수는 일부 PHP 버전에서 지원되지 않습니다.따라서 이전 버전을 설치한 사용자가 플러그인/테마를 사용하려고 하면 오류가 발생합니다.
그래서 저는 명명된 함수를 사용하는 것을 선호합니다.
언급URL : https://stackoverflow.com/questions/31240432/anonymous-functions-in-wordpress-hooks
'source' 카테고리의 다른 글
Ajax 콜 체인에 의한 AngularJs (0) | 2023.02.09 |
---|---|
Angular를 사용하는 방법JS ng-repeat은 Twitter Bootstrap의 비계를 가지고 있습니까? (0) | 2023.02.09 |
Wordpress 테마에서 사용자 정의 클래스 사용 (0) | 2023.02.09 |
데이터베이스에는 컨테이너를 사용하는 것이 권장됩니까? (0) | 2023.01.29 |
빈 어레이를 확인하는 중: 개수 vs 빈 어레이 (0) | 2023.01.29 |