特定の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 );
}
しかし、私は自分が割り当てたエラー通知と同時にプラグインのアクティブ化メッセージを受け取っているので、私はまだそれを間違ってやっていると思います。
エラーメッセージが表示されるだけなので、プラグインのアクティブ化プロセスを適切に停止するための適切なアクションフック/フィルタは何ですか?
私はこのパーティーに遅刻するかもしれませんが、プラグインのアクティベーションを止めて、管理者が気づくところにWordPressにエラーメッセージを表示させるには、単にエラーメッセージを出力して実行を終了します。これには、 wp-cli を指定してNiceを再生するという追加の利点があります。
例:
class testPlugin() {
...
static function activate() {
//[do some stuff here]
if ($error) {
die('Plugin NOT activated: ' . $error);
}
}
register_activation_hook( __FILE__, array( 'testPlugin', 'activate' ));
あなたが私がもう一つの答えを提供する必要があるタイトルを更新したので、前のものはそれがこのものよりさらに単純であるので無視しないでください。
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コアに通知するようにカスタムメッセージを提案することができます。
本質的に、あなたはそれをあなたが望むやり方ですることはできません。すべてのワードプレスフォームは、プロセスを完了した後にリダイレクトされ、自分で出力を生成することはありません。そのため、エラーメッセージは別のページ要求で生成されます。その時点でプラグインがアクティブにならない場合は、メッセージは表示されません。さらに複雑なのは、プラグインがAjaxによって起動される可能性があることです。
醜いけれどもうまくいく方法はphpエラーを生成することによってアクティベーションを失敗させることです、またはIIRCはどんな出力でもするので、あなたはエラー出力ボックスに表示されるでしょうアクティベーションが失敗したときに表示されています。
考えるべきこと:人々はあなたのプラグインファイルをインクルードしたり、どういうわけかUIを迂回したりwp-cliを使ってそれを強制的にアクティブにするかもしれません。アクティブ化を失敗させたい理由によっては、アクティブ化を失敗させようとするよりもエラーメッセージを表示するほうが良い場合があります。
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のためにこのコードを追加しました、しかしあなたは調整する必要があるでしょう。