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()
값이 유사한 과도 /에 저장되며,이 필터가 생략되는 경우 조기 반환? (대부분의 경우 작동하지 않지만 실제로는 관리자 플러그인 화면에서만 작동합니다)