WP-CLI를 수행 할 때 플러그인이로드되지 않도록하려면 어떻게합니까?


13

나는 현재 기본 플러그인 파일 자체 에서이 코드를 사용합니다. 그러나 그 플러그인은 내 것이 아니므 로이 코드를 추가 할 때마다 정상적으로 업그레이드 할 수 있기를 원합니다.

if ( defined( 'WP_CLI' ) && WP_CLI ) {
    exit;
}

이 플러그인은 오류를 생성하고 wp-cli를 올바르게 실행하기 위해 wp-cli를 중지하므로 wp-cli로 플러그인을 비활성화하고 내 작업을 수행하고 다시 활성화 할 수 없기 때문에이 작업을 수행해야합니다.

if x then do not load plugin file xmu-plugin 내에서 할 수있는 방법이 있습니까?

답변:


13

WordPress가 플러그인을로드하기 위해하는 첫 번째 작업 중 하나는 데이터베이스에 저장된 활성 플러그인을 얻는 것입니다.

$active_plugins = (array) get_option( 'active_plugins', array() );

그것은 사용하기 때문에 get_option()우리가 사용할 수있는 option_active_plugins즉시 활성 플러그인의 목록을 수정하는 필터.

function wpse_301282_disable_plugin( $active_plugins ) {
    if ( defined( 'WP_CLI' ) && WP_CLI ) {
        $key = array_search( 'gravityforms/gravityforms.php', $active_plugins );

        if ( $key ) {
            unset( $active_plugins[$key] );
        }
    }

    return $active_plugins;
}
add_filter( 'option_active_plugins', 'wpse_301282_disable_plugin' );

gravityforms/gravityforms.php사용 중지하려는 플러그인의 디렉토리 및 파일 이름으로 바꾸십시오 .

여기서 문제는 플러그인 로딩에 영향을 주려고하는데 너무 늦기 때문에 플러그인 에서 할 수 없다는 것입니다 . 주제에서 너무 늦을 것입니다.

고맙게도 WordPress에는 " 플러그인을 사용해야합니다 "라는 플러그인이 있습니다.이 플러그인은 일반 플러그인 이전과 별도로로드되어 일반 플러그인 목록에 표시되지 않는 추가 할 수있는 플러그인입니다.

이 코드를 Must Use 플러그인에 추가하려면 wp-content/mu-plugins디렉토리가 존재하지 않는 경우 디렉토리 를 작성하고 해당 코드가 포함 된 PHP 파일 (아무것도 호출 가능)을 작성하기 만하면됩니다. 플러그인 헤더 나 다른 것이 필요하지 않습니다.

이제 WordPress가로드 될 때 해당 코드가 다른 모든 플러그인보다 먼저로드됩니다. 필터가 설치되어 있으므로 WordPress가 활성화 된 플러그인 목록을 가져 오면 비활성화하려는 플러그인을로드 할 때 WP-CLI가 활성화 된 경우 해당 목록에서 필터링됩니다.


같은 생각이 있었지만 작동하지 않습니다. 적어도 내 지역 환경에는 없습니다. 아마 get_option()값이 유사한 과도 /에 저장되며,이 필터가 생략되는 경우 조기 반환? (대부분의 경우 작동하지 않지만 실제로는 관리자 플러그인 화면에서만 작동합니다)
kero

흠. 소스를 살펴보면 option_필터가 적용되지 않는 유일한 이유 는 값이없고 기본값을 반환하는 것입니다.
Jacob Peattie

실제로는 그렇습니다 (플러그인이 활성화되지 않았습니다). 테스트 환경을 너무 깨끗하게 유지해서는 안됩니다 ..
kero

1
내 경우에는 내가 필요로했기 때문에 이것을 수락했습니다. 일반적 --skip-plugin=x으로 wp-cli 의 옵션이 더 나은 방법 일 수 있습니다.
NextGenThemes

15

skip-pluginsWP-CLI를 사용할 때 WP-CLI 의 옵션을 사용하여 개별 플러그인을로드하지 않을 수 있습니다 .

다음과 같이 명령에 사용할 수 있습니다.

wp user list --skip-plugins=my-plugin

또는 wp-cli.yml파일 에 이것을 추가 할 수 있습니다 .

skip-plugins:
- my-plugin

-1

플러그인 디렉토리 이름을 바꾸면 비활성화됩니다. 때때로 플러그인 [linux]를 일시적으로 비활성화하는 경우가 있습니다 :

mv my-plugin-dir renamed-my-plugin-dir

OP는 WP-CLI를 사용할 때 플러그인을 건너 뛰고 싶어합니다. 동시에 발생할 수있는 다른 활동은 아닙니다.
Mark Kaplun
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.