테마를 통한 플러그인 / 플러그인 동작 비활성화


19

내 사이트에 Google Analyticator 플러그인 을 설치했습니다 . 또한 스마트 폰이 아닌 모바일 브라우저 용으로 설계된 테마를 제공하기 위해 MobilePress 플러그인 을 사용하고 있습니다. 내가 설정 한 모바일에 대한 Google 웹 로그 분석을 이 테마에 사용하고 더 큰 JS 파일에 대한 호출을 포함하기 때문에 Analyticator 플러그인을 사용하지 않도록하고 싶습니다.

functions.php 또는 다른 방법을 사용하여 플러그인을 비활성화 할 수 있는지 아는 사람이 있습니까?

페이지에 기능을 추가하는 코드를 찾았으므로 전체 플러그인을 비활성화 할 수 없다면 실행을 중지 할 수 있습니까? 나는 운없이 직접 비활성화하려고했습니다. 플러그인 파일의 코드는 다음과 같습니다.

add_action('wp_head', 'add_google_analytics', 999999);
add_action('init', 'ga_outgoing_links');

나는 그 행동을 다음과 같이 제거하려고 시도했다.

remove_action('wp_head','add_google_analytics',9999999);
remove_action('init', 'ga_outgoing_links');

도움을 주시면 감사하겠습니다.


나에게 이것은 기술적으로 작동해야 하므로이 코드를 실행하는 타이밍에 문제가 발생합니다 (너무 일찍 또는 너무 늦습니다). 자세한 정보를 제공하십시오.
Rarst

네, 잘 작동한다고 생각했습니다. 추가 / 제거 작업에 대한 경험이 많지 않으므로 추가 디버깅 방법을 잘 모르겠습니다. EAMann의 답변이 효과가 있었지만 어떤 정보를 더 찾고 있었습니까?
PNMG

나는 약간 혼란스러워합니다-좋은 수단으로 가야한다면 정상적인 수단을 통해 플러그인을 비활성화하는 것이 쉽지 않습니까? 코드로만 수행하는 EAMann의 답변 나는 당신이 어떤 조건에서 동적으로 비활성화하기를 원한다고 가정했습니다 ...
Rarst

일반 데스크탑 브라우저에 대해 워드 프레스로 설정된 일반 테마가 있습니다. 이 테마에서는 GA 플러그인을 사용하고 싶습니다. mobilepress 플러그인은 php를 사용하여 사용자 에이전트 문자열을 가져오고 스마트 폰 또는 비 스마트 폰에 다른 테마를 제공합니다. 스마트 폰 이외의 테마에 functions.php 파일을 사용하여 GA 플러그인이 해당 테마의 <head>에 JS를 넣지 않도록 설정하려고했습니다. 다른 두 테마 (데스크톱 및 스마트 폰)에 대해서는 여전히 활성화되어 있어야합니다. 명확하게하는 데 도움이됩니까?
PNMG

네, 그렇게 생각했습니다. 그러나 비활성화는 플러그인을 영구적으로 비활성화하며 명시 적으로 활성화 될 때까지 꺼져 있습니다. 사용 사례에 적합한 것으로 보이지 않습니다.
Rarst

답변:


25

WordPress는 플러그인을 활성화 할 때 activate_plugin()함수를 호출합니다 . 이 기능은 샌드 박스에서 플러그인을 활성화하고 성공시 다른 곳으로 리디렉션합니다. 플러그인 의존성을 프로그래밍 방식으로 활성화하기 위해 몇 명의 저자가 사용했습니다.

deactivate_plugin()이와 비슷한 기능을하는 또 다른 기능이 있습니다. 실제로 "비활성화"또는 "비활성화"를 클릭하면 워드 프레스가 플러그인을 비활성화하는 방법입니다.

설치된 플러그인을 비활성화하려면 다음을 호출하십시오.

deactivate_plugins( '/plugin-folder/plugin-name.php' );

또는 한 번에 여러 플러그인을 비활성화하려면

deactivate_plugins( array( '/first-plugin/first.php', '/second-plugin/second.php' ) );

비활성화 후크를 호출하지 않고 플러그인을 비활성화 할 수있는 두 번째 매개 변수 (첫 번째는 비활성화 할 플러그인의 문자열 또는 배열 임)가 있습니다. 기본적으로 false로 설정되어 있으므로 그대로 두는 것이 좋습니다. 어떤 이유로 든 비활성화를 우회하려는 경우가 아니면 다음을 수행하십시오.

deactivate_plugins( '/plugin-folder/plugin-name.php', true );

이것은 플러그인을 끄지 만 플러그인이 비활성화 할 때 등록한 것은 실행하지 않습니다. 따라서 플러그인이 비활성화 될 때 플러그인이 옵션 또는 db 테이블을 제거하는 경우 해당 "자동"비활성화를 수행하여 해당 정보를 보존하고 다른 곳에서 사용하려고합니다.


대단한 답변-다른 곳과 비교할 필요는 없지만 근처에있을 수있는 "웹 사이트가 있습니다"라는 부족한 답변이 있다고합시다.
편집자

functions.php에있는이 코드는 관리자에서 플러그인을 비활성화하여 다른 두 테마에서 플러그인을 비활성화합니다. 그것을 지적 해 주셔서 감사합니다. functions.php 파일이있는 하나의 테마에 대해서만 비활성화하고 싶었습니다.
PNMG

주어진 사이트에서 한 번에 하나의 테마 만 사용하고 있지만 테마를 비활성화 한 후 플러그인을 다시 활성화하려는 경우에도 가능합니다.
EAMann

11

이것은 위의 EAMann의 훌륭한 답변 덕분이며 원래 포스터에도 도움이 될 것이라고 생각했습니다 ...

프리미엄 버전을 업로드 한 경우 (충돌 가능성을 방지하기 위해) 플러그인을 비활성화 할 수있는 솔루션이 필요했습니다. 이전에는 is_plugin_active로 상태를 감지하고 사용자에게 끄도록 관리자 오류 메시지를 표시했습니다. 훨씬 매끄 럽습니다 ...

function deactivate_plugin_conditional() {
    if ( is_plugin_active('plugin-folder/plugin-name.php') ) {
    deactivate_plugins('plugin-folder/plugin-name.php');    
    }
}
add_action( 'admin_init', 'deactivate_plugin_conditional' );

참고 : register_activation_hook에서 작동하지 않는 것처럼 보이지만 admin_init는 매력처럼 작동합니다.


1
참고로, is_plugin_active가 이미 deactivate_plugins 후크에서 확인되어 있으므로 다시 수행 할 필요가 없습니다.
Bryan Willis

1

내 솔루션은 다음과 같이 다른 플러그인을 비활성화 할 수있는 플러그인을 만듭니다.

/*
 * Plugin Name: Disable/Configure Plugins
 * Description: Lets you disable/configure plugins based on environment variables
 * Author:      Chris Sewell
 */

/**
 * Disable specified plugins in development environment.
 * 
 * This is a "Must-Use" plugin. Code here is loaded automatically before regular plugins load.
 * This is the only place from which regular plugins can be disabled programatically.
 * 
 * Place this code in a file in WP_CONTENT_DIR/mu-plugins or specify a custom location 

 * to "development" or "production" in each particular server/environment.
 */

/* Disable specified plugins in development environment */
if (((getenv('environment') == 'production') || (getenv('environment') == 'alpha')) == false) {
    $plugins = array(
        'w3-total-cache/w3-total-cache.php'
    );
    require_once(ABSPATH . 'wp-admin/includes/plugin.php');
    deactivate_plugins($plugins);
}

이것을 프로덕션으로 푸시하고 활성화 한 다음 데이터베이스를 로컬 개발 시스템으로 가져옵니다.

출처

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