register_activation_hook에서 activate_plugin이 작동하지 않는 이유 include_once(ABSPATH .’/wp-admin/includes/plugin.php’);

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

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');
        });
    }
}); 


답변

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

간단한 설명 : 플러그인은 기본적으로 데이터베이스에 저장된 활성 퍼그-인 배열에 플러그인을 추가하여 활성화됩니다. 첫 번째 플러그인을 활성화하면 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 메소드를 복사하고 문제없이 자신의 사용자 정의 메소드를 작성하는 방법을 설명하는 사람입니다. /programming/1415958/how-to- 내부적으로 wordpress-plugins 활성화

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

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