web-dev-qa-db-ja.com

起動時にプラグインを停止する WP バージョンが満たされていない場合、admin_noticesアクションフックにエラーメッセージが表示される

特定の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 );
}

しかし、私は自分が割り当てたエラー通知と同時にプラグインのアクティブ化メッセージを受け取っているので、私はまだそれを間違ってやっていると思います。

Stop a plugin in the activation process when a certain WP version is not met 

エラーメッセージが表示されるだけなので、プラグインのアクティブ化プロセスを適切に停止するための適切なアクションフック/フィルタは何ですか?

9
Carl Alberto

私はこのパーティーに遅刻するかもしれませんが、プラグインのアクティベーションを止めて、管理者が気づくところにWordPressにエラーメッセージを表示させるには、単にエラーメッセージを出力して実行を終了します。これには、 wp-cli を指定してNiceを再生するという追加の利点があります。

Plugin activation failed 

例:

class testPlugin() {

  ...

   static function activate() {

   //[do some stuff here]

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

}

register_activation_hook( __FILE__, array( 'testPlugin', 'activate' ));
5
Pascal Roget

あなたが私がもう一つの答えを提供する必要があるタイトルを更新したので、前のものはそれがこのものよりさらに単純であるので無視しないでください。

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;
    }
}

enter image description here 

プラグインを有効にしようとするとplugins.phpファイルと対話することに注意してください。そこにはあなたが実行できるアクションの大きなスイッチがあります。

また、エラーが$_GET['error']に設定されている場合は、定義済みのエラーメッセージだけが表示されます。独自のカスタムメッセージを作成することはできません。これが私があなたにこのような解決策を提案した理由です。

enter image description here 

プラグインがいくつかの要件を満たしていない場合、管理者がWordPressコアに通知するようにカスタムメッセージを提案することができます。

2
prosti

本質的に、あなたはそれをあなたが望むやり方ですることはできません。すべてのワードプレスフォームは、プロセスを完了した後にリダイレクトされ、自分で出力を生成することはありません。そのため、エラーメッセージは別のページ要求で生成されます。その時点でプラグインがアクティブにならない場合は、メッセージは表示されません。さらに複雑なのは、プラグインがAjaxによって起動される可能性があることです。

醜いけれどもうまくいく方法はphpエラーを生成することによってアクティベーションを失敗させることです、またはIIRCはどんな出力でもするので、あなたはエラー出力ボックスに表示されるでしょうアクティベーションが失敗したときに表示されています。

考えるべきこと:人々はあなたのプラグインファイルをインクルードしたり、どういうわけかUIを迂回したりwp-cliを使ってそれを強制的にアクティブにするかもしれません。アクティブ化を失敗させたい理由によっては、アクティブ化を失敗させようとするよりもエラーメッセージを表示するほうが良い場合があります。

2
Mark Kaplun

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のためにこのコードを追加しました、しかしあなたは調整する必要があるでしょう。

0
prosti