코드를 통해 플러그인을 활성화하는 방법?


22

가능한 경우 다른 플러그인에서 설치된 플러그인 (파일이 wp-content / plugins 디렉토리에 있음을 의미 함)을 어떻게 활성화 할 수 있습니까?

답변:


30

이것이 일부 웹 앱에서 내가 한 방법입니다.

function run_activate_plugin( $plugin ) {
    $current = get_option( 'active_plugins' );
    $plugin = plugin_basename( trim( $plugin ) );

    if ( !in_array( $plugin, $current ) ) {
        $current[] = $plugin;
        sort( $current );
        do_action( 'activate_plugin', trim( $plugin ) );
        update_option( 'active_plugins', $current );
        do_action( 'activate_' . trim( $plugin ) );
        do_action( 'activated_plugin', trim( $plugin) );
    }

    return null;
}
run_activate_plugin( 'akismet/akismet.php' );

1
Rarst가 썼 듯이, 이것은 "안전"하지 않습니다. 이 방법으로 활성화 한 플러그인이 안전하고 사이트를 손상시키지 않는지 확인해야합니다.
sorich87

10
전혀 안전하지는 않지만 도식적으로 프로그래밍 방식으로 활성화하면 수행중인 작업을 알아야합니다. ;-)
Denis de Bernardy

안전은 제쳐두고-이것은 질문의 일부가 아닙니다. -표준 활성화 필터를 호출하기 때문에 sorich의 접근 방식이 마음에 듭니다. 따라서 플러그인은 설정 루틴이있는 경우 설정 루틴을 실행하도록 변경됩니다.
hakre

3
적어도 최근에는 이것이 바퀴를 재발 명하고 있습니다. 내장을 사용 activate_plugin()했으며 동일한 방식으로 작동합니다.
Jake

1
@SagiveSEO 그것은 완벽하게 안전합니다-사용자 입력 / 승인을 요구하고 nonces 및 그 nonces를 검사하는 것을 제외하고는 WP 가하는 방식과 유사합니다. 웹 등)이며 임의로 호출 할 수 없습니다.
unity100

13

플러그인 활성화 프로세스는 WP 관리 인터페이스와 작동하도록 코딩되어 있습니다. 오류가있는 플러그인 사용을 방지하기 위해 몇 가지 검사를 수행합니다 (시작시로드하면 WP가 중단 될 수 있음).

다른 곳에서는 사용할 수없는 것으로 문서화 된 activate_plugin()함수 ( source )에 의해 처리됩니다 .

따라서 코드로 플러그인을 활성화하려면 목표 자체가 상대적으로 쉽습니다- active_plugins해당 플러그인을 포함하도록 옵션을 변경하십시오 . 그러나 관련 활성화 후크를 처음부터 다시 작성해야하며 샌드 박스 단계없이 활성화하면 사이트가 손상 될 위험이 있습니다.


7

플러그인은 'active_plugins'옵션으로 배열에 저장됩니다. 배열에는 활성화 된 각 플러그인의 파일 경로가 포함됩니다.

플러그인을 활성화하려면 경로를 결정한 다음 해당 경로를로 전달해야합니다 activate_plugin($plugin_path).

이것은 말보다 쉽지만 (2.9 이상) 핵심 코드는 쉽지 않습니다.

activate_plugin ()을 사용하기 전에 wp-admin / includes /의 plugin.php 파일을 포함시켜야합니다. 플러그인이 아직 활성화되어 있지 않은지도 확인해야합니다. 결과는 다음과 같습니다 (YMMV).

// Define the new plugin you want to activate
$plugin_path = '/path/to/your/new/plugin.php';
// Get already-active plugins   
$active_plugins = get_option('active_plugins');
// Make sure your plugin isn't active
if (isset($active_plugins[$plugin_path]))
    return;

// Include the plugin.php file so you have access to the activate_plugin() function
require_once(ABSPATH .'/wp-admin/includes/plugin.php');
// Activate your plugin
activate_plugin($plugin_path);

나는 WP 2.9의 프로덕션에서 이것을 사용하고 큰 문제는 없었지만 테스트 할 때 WPMU에서 예기치 않은 결과가 발생했기 때문에 네트워크 설치에서 이것을 사용하십시오.


오랜 시간이 지났지 만 기억한다면 예기치 않은 결과는 무엇입니까?
Ünsal Korkmaz

나는 완전히 기억하지 못한다. MS 사이트가 너무 많지 않아서 작동하지 않았고 직접 작업했습니다.
jerclarke

이것을 어떻게 실행합니까? 방금 직접 실행하면 get_option이 정의되지 않습니다 ...
Janus Troelsen

functions.php에 이것을 추가하면 작동하지만 항상 함수에 물건을 넣고 "init"또는 "wp"에 연결해야합니다.
jerclarke

3

WP Codex 에 따르면 Wordpress는 플러그인 활성화 기능을 제공합니다.

function plugin_activation( $plugin ) {
    if( ! function_exists('activate_plugin') ) {
        require_once ABSPATH . 'wp-admin/includes/plugin.php';
    }

    if( ! is_plugin_active( $plugin ) ) {
        activate_plugin( $plugin );
    }
}

plugin_activation('akismet/akismet.php');

이단, 내 대답이 어때서?
Mowshon

답변만으로 코드를 게시해도 괜찮지 만 답을 읽는 새로운 프로그래머에게는 해석하기 어려울 수 있습니다. 이런 식으로 OP는 코드 작동 방식을 더 잘 이해할 수 있습니다.
Ethan Jinks O'Sullivan

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.