특정 WP 버전이 충족되지 않으면 활성화 프로세스에서 플러그인을 중지 한 후 admin_notices 조치 후크에 오류 메시지를 표시하십시오. ‘deactivate_plugin_now’ );

특정 WP 버전 번호를 충족하지 않으면 활성화하고 싶지 않은 플러그인이 있는데 admin_notices 작업 후크에 오류 메시지가 표시됩니다. 내가 연구 한 한 아래 코드는이 목표를 달성 할 수있는 최선입니다.

$wp_version = get_bloginfo('version');
if ( $wp_version < 4.5 ) {
    add_action( 'admin_init', 'deactivate_plugin_now' );
    add_action( 'admin_notices', 'errormsg' ) );
}

public function deactivate_plugin_now() {
    if ( is_plugin_active('myplugin/myplugin.php') ) {
        deactivate_plugins('myplugin/myplugin.php');
    }
}

public function errormsg () {
    $class = 'notice notice-error';
    $message = __( 'Error you did not meet the WP minimum version', 'text-domain' );
    printf( '<div class="%1$s"><p>%2$s</p></div>', $class, $message );
}

그러나 할당 된 오류 알림과 함께 플러그인 활성화 메시지가 동시에 표시되어 여전히 잘못하고 있다고 생각합니다.

특정 WP 버전이 충족되지 않으면 활성화 프로세스에서 플러그인 중지

플러그인 활성화 프로세스를 올바르게 중지하는 적절한 조치 후크 / 필터는 무엇입니까? 그래서 오류 메시지 만 표시됩니까?



답변

나는이 파티에 늦을 수도 있지만 플러그인 활성화를 중지하고 관리자가 통지하는 곳에서 WordPress에 오류 메시지를 표시하도록하려면 단순히 오류 메시지를 출력하고 실행을 종료합니다. 이것은 wp-cli로 멋지게 플레이 할 수 있다는 이점이 있습니다 .

예:

class testPlugin() {

  ...

   static function activate() {

   //[do some stuff here]

   if ($error) {
      die('Plugin NOT activated: ' . $error);
   }

}

register_activation_hook( __FILE__, array( 'testPlugin', 'activate' ));

답변

본질적으로 원하는 방식으로 할 수 없습니다. 모든 워드 프레스 양식은 프로세스가 완료된 후 리디렉션되며 자체 출력을 생성하지 않으므로 다른 페이지 요청에서 오류 메시지가 생성됩니다. 이 시점에서 플러그인이 활성화되지 않으면 메시지가 표시되지 않습니다. 더 복잡한 문제는 플러그인이 Ajax에 의해 활성화 될 수 있다는 것입니다.

추악하지만 작동하는 방법은 PHP 오류 또는 IIRC에서 출력이 발생하여 활성화에 실패하는 것이므로 플러그인 활성화 후크에서 “버전 불일치”와 같은 것을 출력하면 오류 출력 상자에 표시됩니다. 활성화에 실패하면가 표시됩니다.

고려해야 할 사항 : 사람들이 플러그인 파일을 포함하거나 UI를 우회하거나 wp-cli를 사용하여 강제로 활성화 할 수 있습니다. 정품 인증에 실패하려는 이유에 따라 정품 인증에 실패하는 것보다 오류 메시지가있는 것이 좋습니다.


답변

제목을 업데이트 했으므로 다른 답변을 제공해야합니다. 이전 답변은이 답변보다 훨씬 단순하므로 무시하지 마십시오.

add_action( 'admin_notices', 'my_plugin_admin_notices' );

function my_plugin_admin_notices() {
    if ( ! is_plugin_active( 'hello.php' ) && isset( $_GET['customhello'] ) ) {
        echo '<div class="error"><p>WordPress need to be at least 8.5 to activate this plugin</p></div>';
    }
}

add_action( 'activate_plugin', '_20170113_superess_activate', 10, 2 );

function _20170113_superess_activate( $plugin, $network_wide ) {
    global $wp_version;
    if ( $wp_version < 8.5 && 'hello.php' == $plugin ) {
        $redirect = self_admin_url( 'plugins.php?customhello=1' );
        wp_redirect( $redirect );
        exit;
    }
}

플러그인을 활성화하려고하면 plugins.php 파일과 상호 작용합니다. 거기에 당신은 당신이 실행할 수있는 행동의 큰 전환이 있습니다.

$_GET['error']미리 정의 된 오류 메시지가있는 순간 오류가 설정 되어 있는 경우 사용자 정의 메시지를 작성할 수 없습니다. 이것이 내가 당신에게 이와 같은 해결책을 제안한 이유입니다.

플러그인이 일부 요구 사항을 충족하지 않는 경우 WordPress 코어에 대한 관리자 통지로 사용자 정의 메시지를 제안 할 수 있습니다.


답변

WP <8.5 인 경우 hello.php (Hello Dolly)를 억제하는이 코드는 어떻습니까?

 add_action( 'activate_plugin', '_20170113_superess_activate' , 10, 2);

 function _20170113_superess_activate($plugin, $network_wide){
      global $wp_version;

      if ( $wp_version < 8.5 && 'hello.php' == $plugin ) {
        error_log( 'WordPress need to be at least 8.5' );
        $args = var_export( func_get_args(), true );
        error_log( $args );
        wp_die( 'WordPress need to be at least 8.5 to activate this plugin' );
      }
 }

관리자 알림을 강제로 만들지 않기 때문에 이것이 좋습니다. 플러그인 설치 중단 이유에 대한 피드백을 얻을 수 있습니다.

HelloDolly에이 코드를 추가했지만 조정해야합니다.