is_plugin_active 함수가 존재하지 않습니다


15

WordPress 3.0.5를 사용하고 있으며 3.1rc4로 테스트했습니다. 내 플러그인의 기본 PHP 파일에서 is_plugin_active를 호출하려고하면 얻을 수 Call to undefined function is_plugin_active()있습니다. add_action과 add_filter를 호출 할 수 있습니다. 이 문제를 해결하려면 무엇을 확인 / 변경해야합니까?

플러그인 페이지의 관리자 내부에서 발생합니다. 내 기본 플러그인 파일 맨 위에 if (function_exists('is_plugin_active')) {항상 false를 반환합니다.

또한 다른 플러그인의 기본 플러그인 파일에서 함수를 볼 수 없습니다 (필요한 경우).


귀하의 설명에서 확실하지 않습니다-활성화 된 플러그인에 문제가 있거나 활성화 또는 다른 특정 조건 하에서 무언가를 시도하고 있습니까?
Rarst

나는 것으로 나타났습니다 function_exists('is_plugin_active')위해 호출되는 방법 내에서 호출 할 때 방법의 외부하지만 해당하는 경우 주요 플러그인 파일에서 호출 할 때 거짓 activated_plugin행동.
Carl

어느 페이지에 오류가 표시됩니까? 플러그인 페이지 (wp-admin / plugins.php)? 문제가되는 플러그인을 활성화하기 전 또는 후에이 문제가 발생합니까? Rarst는 좋은 지적이 있습니다. 워드 프레스에서 함수를 호출하는 시점을 알고 있습니까?
Jonnybojangles

플러그인을 활성화 한 후 wp-admin / plugins.php에 오류가 표시됩니다. 동작으로 연결되는 일부 메소드를 확인했으며 거기에서 작동합니다. 포함 순서와 관련이있는 것 같습니다.
Carl

플러그인은 알파벳 순서로로드되므로 플러그인이 조기에 처리되지 않을 수 있습니다. 플러그인의 이름을 바꾸어 문자 a (예 : a_myplugin-name)로 시작하여 이전에로드되도록하십시오. 그러나 가장 좋은 옵션은 플러그인이로드 된 후 실행되는 함수 내에서 function_exists 블록을 호출하는 것입니다. WP 코덱에서 대략적인 실행 순서를 볼 수 있습니다. codex.wordpress.org/Plugin_API/Action_Reference
Phill Healey

답변:


27

is_plugin_active ()가 정의 된 파일이 wp-admin/includes/plugin.php플러그인이로드 된 후 관리자에게만로드되기 때문입니다.

따라서 'admin_init'가 시작된 후에 만 ​​호출 할 수 있습니다.

function check_some_other_plugin() {
  if ( is_plugin_active('some-plugin.php') ) {
    ...
  }
}
add_action( 'admin_init', 'check_some_other_plugin' );

이미 관리자 인 경우 잘못 구성하여 액세스 할 수없는 항목이 있습니까?
Carl

1
업데이트 된 답변을 참조하십시오.
scribu

10

템플릿과 사용자 페이지에서도 is_plugin_active ()를 호출 할 수 있으며, 관련 플러그인에 유용 할 수 있습니다 (예 : 새 플러그인을 운영하려면 플러그인 'xyz'가 필요함). Codex의 is_plugin_active () 문서에 명시된대로 plugin.php 파일을 수동으로 포함해야합니다.

다음은 애드온 객체를 호출하기 전에 프리베이스 플러그인이 활성화되어 있는지 확인하기 위해 프리미엄 애드온 팩에서 사용하는 기능적인 예입니다. 기본 플러그인에서 특정 후크 및 필터를 사용할 수 있어야합니다. 그렇지 않으면 충돌이 발생합니다.

include_once(ABSPATH.'wp-admin/includes/plugin.php');
if (!function_exists('is_plugin_active') || !is_plugin_active('store-locator-le/store-locator-le.php')) { 
   return;
}

또한 활성 관리자 로그인에서 is_plugin_active ()에 문제가있는 경우 admin_init가 실행되기 전에 테스트하기 때문일 수 있습니다. admin_menu는 admin_init 전에 시작되며 admin_menu에서 테스트를 수행 한 적이 있습니다. admin_menu가 이미 실행 된 이후로 직관적이지 않은 "admin_init"라는 이름입니다. init를 "먼저 실행"이라고 생각합니다. 아마도 admin_kinda_init ()가 더 좋을 것입니다. :)


추가 include_once(ABSPATH.'wp-admin/includes/plugin.php');는 나를 위해 속임수를했다. 감사!
Dave

8

빠르고 더러운 해결 방법은 기능을 수동으로 복제하는 것입니다.

if ( ! function_exists( 'is_plugin_active' ) ) {
    function is_plugin_active( $plugin ) {
        return in_array( $plugin, (array) get_option( 'active_plugins', array() ) );
    }
}

꽤 짧기 때문에 해결 방법으로 자신의 코드에서 구현하기가 너무 어려워서는 안됩니다.


4

간단하고 쉽습니다. WP 에서 가져온

if ( ! function_exists( 'is_plugin_active' ) )
     require_once( ABSPATH . '/wp-admin/includes/plugin.php' );

그런 다음

 if ( is_plugin_active( 'feed-them-social/feed-them.php' ) ) {

   }

기능 점검을 받으십시오. 더 이상 오류가 없습니다.


1
사용하고 있다면 requireonce아마도 기능을 확인할 필요가 없습니다 ...?
Phill Healey

플러그인을 사용하기 전에 플러그인이 정의되어 있는지 확인할 수 있습니다. 그렇지 않으면 문제가 발생할 수 있습니다.
스펜서 라 바디

3

plugin.php를 포함하는 대신 자신의 is_plugin_active 함수를 정의하는 방법에 대한 Tom Auger의 답변을 선호했습니다. 그러나 동일한 기능 이름을 사용하면 관리 영역이 중단되었습니다. 다른 기능 이름을 사용하여 해결했습니다.

function is_plugin_active_byme( $plugin ) {
    return in_array( $plugin, (array) get_option( 'active_plugins', array() ) );
}

나는 동의한다. 함수 선언에서 충돌을 확인할 수는 있지만 WP는 그렇지 않으므로 WP는 오류를 트리거합니다.
Chris Sprague

1

당신이 사용하고 is_plugin_active관리자 또는 프런트 엔드 안에? 나는 그것이 is_plugin_activewp-admin / includes / plugin.php 안에있는 관리자 기능이라고 확신합니다 .

또한 기본 플러그인 파일은 Wordpress File Header를 사용 합니까? 위의 plugin.php 파일이로드 된 후 플러그인이 포함되어 있습니까?


플러그인 페이지의 관리자 내부에서 발생합니다. 플러그인에는 제안 된 WP 파일 헤더가 있습니다. plugin.php 뒤에 플러그인이 포함되어 있는지 어떻게 확인할 수 있습니까?
Carl

1

활성 플러그인을 디버그하려면 다음을 수행하십시오.

var_dump(get_option(...));

특정 플러그인을 확인하려면

in_array(get_option(...));

이 작업을 " active_plugins"IIRC 라고 합니다.


0

이 솔루션 중 어느 것도 나를 위해 일하지는 않았지만 이것은 효과가있었습니다.

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

codebangers.com 에서이 솔루션을 찾았습니다.

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