WordPress 테마의 많은 개발자가 functions.php 에서 이것을 사용한다는 것을 알았습니다.
if (function_exists('register_nav_menus')) {
register_nav_menus (array('primary' => 'Header Navigation'));
}
나를 위해, 나는 항상 functions.php에서 사용하는 모든 함수에 대해 add_action을 사용 합니다.
따라서 위의 내용은 다음과 같습니다.
add_action('init', 'my_register_nav_menus');
function my_register_nav_menus() {
register_nav_menus (array('primary' => 'Header Navigation'));
}
두 가지 질문이 있습니다.
-
첫 번째 방법에서 if 문을 사용하는 이유는 무엇입니까?
-
어느 것이 올바른 방법입니까?
답변
IMHO가 필요하지 않은 이전 버전과의 호환성을 위해 호출하기 전에 내장 된 WordPress 함수가 존재하는지 확인하십시오.
따라서 if ( function_exists( 'register_nav_menus' ) )
테마 작성자가 3.0 이전 버전을 지원하는 것을 볼 수 있습니다 .
if ( function_exists( 'dynamic_sidebar' ) )
왜 아직도 왜 보입니까? dynamic_sidebar가 2.2에서 도입 되었기 때문에 말할 수 없었습니다.
그것을 사용하는 또 다른 이유는 테마 또는 플러그인을 플러그 가능하게 만들기 때문입니다. 플러그 가능 기능은 하위 테마 또는 다른 플러그인에서 재정의 할 수있는 기능입니다.
이것은 호출이 아닌 정의에서 수행되며! 연산자를 정의하기 전에 존재하지 않는지 확인하십시오.
if ( ! function_exists( 'my_awesome_function' ) ) {
/**
* My Awesome function is awesome
*
* @param array $args
* @return array
*/
function my_awesome_function( $args ) {
//function stuff
return array();
}
}
이것이 완료되면 하위 테마 또는 다른 플러그인이 해당 기능을 자체 기능으로 대체 할 수 있습니다.
답변
이 function_exists
함수는 add_action
코드를 확인하는 것과 같은 기능을로드하는 다른 방법이 아니며 같은 이름의 다른 함수가 없으므로 코드를 손상시키지 않습니다. php.net에서 :
내장 함수 (내장) 및 사용자 정의 함수 _ 함수의 정의 된 함수 목록을 점검합니다.
당신이 당신의 코드에서 두 번 같은 기능이있는 경우 접두사 왜 그게 전부, 휴식 것입니다 귀하의 wp_보다는 뭔가 다른 기능을.
더 읽기 : http://php.net/manual/en/function.function-exists.php
답변
http://php.net/function_exists 를 사용할 수 있습니다
if(function_exists('my_function')){
// my_function is defined
}
또는 사용 가능한 모든 기능을 보려면 모두 인쇄하십시오.
echo "<pre>"; print_r(get_defined_functions());
페이지에 인쇄하면 해당 기능이 목록에 없으면 해당 기능을 사용할 수 없다는 의미입니다.
특정 라이브러리에 대한 확장을 활성화해야 할 수도 있습니다.
답변
php.net은 이것을 다음과 같이 정의합니다
(PHP 4, PHP 5, PHP 7) function_exists — 주어진 함수가 정의되어 있으면 참을 반환
형 캐스팅 검사와 비슷한 것을 검사 할 수 있다는 점에서 Michelle의 사용법에 동의해야합니다. 따라서 함수가 존재하는지 (해당 페이지 또는 해당 페이지 / 파일 참조에서 호출 된 것) 있는지 확인하면 다른 함수를 실행하거나 템플릿 HTML을 구문 분석하는 것이 안전한지 알 수 있습니다.
누군가 언급했듯이 일반적으로 파일 / 테마 (WordPress 사용)가 필요한 요청을 실행할 수 있는지 확인하는 데 사용됩니다. 테마에 특정 템플릿 부분이 있는지 확인하는 데 사용했습니다.
if ( function_exists( 'register_sidebar' ) ) {
get_sidebar();
}
답변
function_exists
이전이 아닌 테마에서 함수 이름 뒤에 사용해야합니다.
add_action( 'loop_start', 'add_slider' );
function add_slider() {
if ( function_exists( 'soliloquy' ) ) {
soliloquy( 'slider', 'slug' );
}
}
이것은 함수 및 / 또는 마크 업을 출력하기 전에 플러그인이 활성화되어 있는지 확인합니다. 그렇지 않으면 정의되지 않은 함수 호출과 같은 오류가 발생할 수 있습니다.