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


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.