한 사이트에서만 네트워크 지원 플러그인을 비활성화하는 방법은 무엇입니까?


22

(잠재적으로) 대규모 다중 사이트 네트워크를 설정하는 과정에서 필요한 경우 사이트를 추가하고 구성하기 위해 가능한 한 쉽게 만들고 싶습니다. 나는 현재 플러그인을 다루는 단계에 있습니다.

멀티 사이트를 사용하면 플러그인을 활성화 할 수있는 여러 가지 방법을 알고 있습니다

  • 에 플러그인을 /plugins넣고 모든 사이트에서 개별적으로 플러그인을 활성화하십시오.
  • 플러그인을에 넣고 /plugins'network activate'를 사용하여 모든 사이트 에서 플러그인 을 활성화하십시오.
  • 플러그인을에 넣고 /mu-plugins모든 사이트에서 자동으로 활성화

지금, 나는 설정으로 놀았 던 나는 모든 사이트에 활성화 된 Akismet하려는 하지만 하나 또는 두 개의. 플러그인을 네트워크 활성화 한 다음 단일 사이트에서 비활성화 할 수 있다고 생각했지만 그렇게 할 수는 없습니다. 네트워크 활성화를 사용하는 경우 '네트워크 비활성화'옵션 만 있습니다. 모든 사이트.

편리한 네트워크 기능을 활성화 할 수 있지만 사이트별로 플러그인을 비활성화 할 수있는 편리한 방법이 있습니까?

답변:


31

필터를 사용할 수 있습니다 site_option_*.

예를 들어 다음은 id 2의 블로그에서 akismet을 비활성화합니다.

add_filter('site_option_active_sitewide_plugins', 'modify_sitewide_plugins');

function modify_sitewide_plugins($value) {
    global $current_blog;

    if( $current_blog->blog_id == 2 ) {
        unset($value['akismet/akismet.php']);
    }

    return $value;
}

1
추가 플러그인을 설치할 필요없이 문제의 문제를 해결하는 깨끗하고 PHP 수준의 솔루션을 제공하는 +1-순결한 미치광이이며 가능한 한 깨끗하고 플러그인이없는 Wordpress를 좋아하기 때문에! :]
trejder

1
이 코드를 PHP 파일에 mu-plugins넣고 꿈처럼 작동합니다!
bgallagh3r

테마에서는 실제로 작동하지 않습니다. 더 빨리 실행해야하므로 mu-plugins가 적합합니다. 플러그인으로 실행될 수도 있지만 작동하지 않으면 mu-plugin을 쏠 것입니다.
Jake

1
또한이 필터는 LOT을 실행하므로 배열의 인덱스가 설정 해제되기 전에 설정되어 있는지 확인합니다. 처음으로 해당 항목이 존재하지 않는 배열에서 계속 시도합니다. if ( isset($value['akismet/akismet.php']) ) { unset($value['akismet/akismet.php']); }
Jake

1
이것은 여전히 ​​4.9.4에서 잘 작동합니다.
Jake

3

이 플러그인 : http://firestats.cc/wiki/WPMUPluginCommander

네트워크 활성화 작업을 무시하고 자체적으로 수행합니다. 사이트별로 플러그인을 사용 중지 할 수 있습니다.

업데이트 :이 플러그인은 사이트 전체 태그 플러그인을 손상시키는 것처럼 보이므로 프로덕션 네트워크에서 시도하기 전에주의하십시오.


wordpress.org/plugins/plugin-commander-URL이 변경되었습니다. 이 플러그인은 현재 몇 년 동안 업데이트되지 않았지만 ...
Jake

3

다음은 다중 사이트 / 다중 테마 설치에서 특정 테마에 대한 플러그인을 비활성화하는 데 효과적이었습니다. 내 테마의 functions.php 파일 맨 위에 다음 몇 줄을 추가했습니다.

/**
 * Disable fancybox plugin for this theme, it breaks javascript
 */
function deactivate_plugin_conditional() {
    if ( is_plugin_active('fancybox-for-wordpress/fancybox.php') ) {
        deactivate_plugins('fancybox-for-wordpress/fancybox.php');
    }
}
add_action( 'muplugins_loaded', 'deactivate_plugin_conditional' );

나는 이것이 꽤 제한적 인 mu-plugin에서만 작동 할 것이라고 확신합니다. init@GDR처럼 이 작업을 수행합니다 .
Jake

2

활성 플러그인은 wp_ [blog_id] _sitemeta의 'active_plugins'및 'active_sitewide_plugins'필드에있는 wp_ [blog_id] _options에 저장됩니다. 이들은 직렬화 된 필드이므로 수행중인 작업을 모르는 경우 편집하지 마십시오.

wp-admin \ plugin.php도 살펴보십시오. 거기에 선언 된 함수 (예 : is_plugin_active () 및 activate_plugin ())를 사용하여 원하는 작업을 수행 할 플러그인을 작성할 수 있어야합니다.

그러나 나는 당신이 PHP에 능숙하다고 생각합니다.


2

sorich87 및 user33465의 답변이 Wordpress 4.3에서 작동하지 않았습니다. 이것을 테마의 functions.php에 추가하면 효과가 있습니다.

function deactivate_plugin_conditional() {
    $deactivated_plugin_name = 'lazy-load/lazy-load.php';
    deactivate_plugins($deactivated_plugin_name, false, true);
}
add_action( 'init', 'deactivate_plugin_conditional' );

이전 upvoted 솔루션이 더 이상 작동하지 않으며 @gdr의 솔루션이 실제로 작동하는지 확인할 수 있습니다.

@ sorich87의 솔루션이 4.4.1에서 훌륭하게 작동 함을 확인할 수 있습니다. 너희들은 분명히 작동하는 방식으로 그것을 사용하지 않지만 여전히 작동합니다. 그러나 아마도 mu 플러그인에서만 작동하고 테마에서는 확실히 작동하지 않을 수 있습니다. 이 옵션은 테마에서 작동합니다. 그러나 이것은 플러그인을 sorich87에 대해 강제로 비활성화하여 사이트에서 강제로 중지하지만 원하는 경우 정상적으로 사용할 수 있습니다. 나는 후자를 선호하지만 둘 다 유용 할 수 있습니다.
Jake

사실은. 귀하의 사이트가 첫 번째 사이트 인 경우 @ sorich87의 솔루션 방법이 작동하지 않습니다 (ID : 1). 이 경우 플러그인을 네트워크 활성화 할 수 없습니다. 다른 ID가 작동하는 것 같습니다.
Jake

그리고이 방법은 저에게도 똑같은 일을합니다. 사이트 ID가 1 인 사이트의 테마에있는 경우 더 이상 사이트 전체에서 플러그인을 활성화 할 수 없습니다.
Jake

0

WP 3의 기본 기능은 아니지만 option_ * 필터를 사용하여 옵션을 재정의하는 것이 가능하다고 생각합니다.

또한 core.trac.wordpress.org에서 기능 요청으로 제안을 추가하면 좋을 것입니다.



-1

플러그인을 비활성화했지만 메인 사이트 패널에는 여전히 플러그인이 있습니다. 메인 사이트에서 완전히 제거하는 유일한 해결책은 플러그인 사이트의 main.php를 확인하고 사이트에 따라 비활성화하는 것입니다.

global $current_blog;

// Only available to B
if( $current_blog->blog_id == 2 ) {


    define( 'AB_PATH', __DIR__ );

    include_once 'includes.php';

    //  plugin loaded stuff

    AB_Plugin::registerHooks();

    is_admin() ? new AB_Backend() : new AB_Frontend();

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