register_activation_hook에서 activate_plugin이 작동하지 않는 이유


10

첫 번째 플러그인을 활성화하는 동안 두 번째 플러그인을 자동으로 활성화하려고합니다.

register_activation_hook(__FILE__, 'example_activation' );
function example_activation() {
        include_once(ABSPATH .'/wp-admin/includes/plugin.php');
        activate_plugin('hello.php');
}

register_activation_hook 내부에서 작동하지 않습니다. 직접 사용하면 다음과 같이 작동합니다.

include_once(ABSPATH .'/wp-admin/includes/plugin.php');
activate_plugin('hello.php');

어떻게 고칠 수 있습니까? 도와 주셔서 감사합니다

해결책:

나는 이것을 지금 나 자신을 위해 사용하고있다 :

// When this plugin activate, activate another plugin too.
register_activation_hook(__FILE__, function(){
    $dependent = 'hello.php';
    if( is_plugin_inactive($dependent) ){
        add_action('update_option_active_plugins', function($dependent){
            /* for some reason, 
            activate_plugin($dependent); 
               is not working */
            activate_plugin('hello.php');
        });
    }
}); 

// When this plugin deactivate, deactivate another plugin too.
register_deactivation_hook(__FILE__, function(){
    $dependent = 'hello.php';
    if( is_plugin_active($dependent) ){
        add_action('update_option_active_plugins', function($dependent){
            deactivate_plugins('hello.php');
        });
    }
}); 

원래 게시물을 잘못 읽었습니다. 나는 그것이 올바르게 포맷되었다고 말해야합니다. 이 기능이 플러그인의 메인 기능입니까?
Chris

잠깐만 요 내 게시물을 수정해야합니다.
Chris

두 번째 플러그인을 활성화하는 첫 번째 플러그인의 예 .. 두번째 플러그인 예제로 hello.php입니다
Ünsal KORKMAZ

답변:


8

무슨 일 일어나고 있는지에 대한 자세한 설명은 이 게시물을 참조하십시오 (이것은 플러그인을 비활성화하기위한 것이지만 문제는 동일합니다).

간단한 설명 : 플러그인은 기본적으로 데이터베이스에 저장된 활성 퍼그-인 배열에 플러그인을 추가하여 활성화됩니다. 첫 번째 플러그인을 활성화하면 WordPress는 현재 활성화 된 모든 플러그인의 배열을 검색하여 플러그인을 추가하지만 (아직 데이터베이스를 업데이트하지는 않음) 설치 콜백을 실행합니다.

이 설치 콜백은 코드를 실행합니다.

그 후 WordPress는 첫 번째는 포함하지만 두 번째는 포함 하지 않는 위의 배열로 데이터베이스를 업데이트합니다 . 따라서 두 번째 플러그인이 활성화되지 않은 것으로 나타납니다.

해결책 : 위의 링크에서 언급 한 해결책은 다음과 같습니다 (예상되지 않음).

//This goes inside Plugin A.
//When A is activated. activate B.
register_activation_hook(__FILE__,'my_plugin_A_activate'); 
function my_plugin_A_activate(){
    $dependent = 'B/B.php';
    if( is_plugin_inactive($dependent) ){
         add_action('update_option_active_plugins', 'my_activate_dependent_B');
    }
}

function my_activate_dependent_B(){
    $dependent = 'B/B.php';
    activate_plugin($dependent);
}

시간이 있으면 지금 사용중인 것을 쓰도록 질문을 편집하십시오. 당신은 activate_plugin ($ dependent)을 볼 수 있습니다; 플러그인을 활성화 할 때 작동하지 않습니다. 어떻게 고칠 수 있습니까?
Ünsal Korkmaz

코드를 테스트 플러그인에 복사하고 다른 테스트 hello.php테스트 플러그인을 작성 하면 나에게 적합합니다. 플러그인이 서브 디렉토리에 존재하면 폴더를 제공해야합니다. 예 : hello/hello.php.
Stephen Harris

변경할 때 내 코드는 정상 .. 문제가 시작을 작동 activate_plugin('hello.php');하여 선을activate_plugin($dependent);
Ünsal KORKMAZ

콜백에 주어진 변수 hello.php는 현재 활성화 된 플러그인의 배열 이 아니기 때문 입니다. 자신의 변수를 콜백에 전달할 수 없습니다. 클래스 / 글로벌 변수를 사용하지 않으면을 사용해야합니다 activate_plugin('hello.php');. 그러나 그것은 문제가되지 않아야합니다 ...?
Stephen Harris

잘 나는 많은 장소 tbh에 동일한 변수를 쓰고 싶지 않습니다. 그러나 큰 문제는 아닙니다. thx 많이
Ünsal Korkmaz

2

다음은 왜 작동하지 않는지 설명하고, activate_plugin 메소드를 복사하고 문제없이 자신의 사용자 정의 메소드를 작성하는 방법을 설명하는 사람입니다. /programming/1415958/how-to- 내부적으로 wordpress-plugins 활성화

다음은 activate_plugin 코드의 원래 소스입니다. 사용자 고유의 함수를 작성하고 작동하지 않는 위치를 확인하는 데 사용할 수 있습니다. http://hitchhackerguide.com/2011/02/11/activate_plugin/

다음은 다른 누군가가 해당 소스 코드에서 사용했을 수도있는 대체 플러그인 활성화 방법을 포함하는 가능한 솔루션입니다. 코드 를 통해 플러그인을 활성화하는 방법?


해결책은 여전히 register_activation_hook에서 작동하지 않는 것을
Ünsal KORKMAZ

운 좋게도 이제 플러그인을 활성화하는 고유 한 방법이 있으므로이를 디버깅하고 실패한 위치를 파악할 수 있어야합니까? :) 기본 방법 대신 사용자 정의 activate_plugin 방법을 사용하도록 register_activation_hook을 변경 했습니까? 그렇다면 몇 가지 trigger_error 문을 던져서 실패한 부분을 찾으십시오. 예를 들어, 시작하기에 좋은 곳은 메서드가 실패했을 때 반환되는 것을 찾는 것입니다.
mltsy

디버깅을 위해 최선을 다했지만 이유를 찾을 수 없었습니다. register_activation_hook이 실행 된 후 active_plugins 옵션이 업데이트 될 수 있습니다.
Ünsal Korkmaz

죄송합니다. 교환 한 두 링크 (마지막 두 링크)의 순서를 수정했습니다. "코드를 통해 플러그인을 활성화하는 방법"이라는 제목의 링크를 사용하고 있습니까? 제공하는 또 다른 유용한 힌트는 기본 activate_plugin메서드 의 반환 값입니다 . trigger_error반환 값을 찾아 여기에 게시하는 데 사용할 수 있습니다 .
mltsy
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.