Ich habe ein Plugin, das ich nicht aktivieren möchte, wenn es einer bestimmten WP Versionsnummer nicht entspricht. Dann wird im Aktions-Hook admin_notices eine Fehlermeldung angezeigt. Soweit ich recherchiert habe, ist der folgende Code der beste, mit dem ich dieses Ziel erreichen kann:
$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 );
}
Aber ich denke, ich mache es immer noch falsch, weil ich gleichzeitig mit der Fehlermeldung, die ich zugewiesen habe, die Meldung bekomme, dass das Plugin aktiviert ist.
Was wäre der richtige Aktions-Hook/Filter, um den Plugin-Aktivierungsprozess ordnungsgemäß zu stoppen, sodass ich nur die Fehlermeldung erhalte?
Ich komme vielleicht zu spät zu dieser Party, aber um die Plugin-Aktivierung zu stoppen und WordPress eine Fehlermeldung anzeigen zu lassen, in der der Administrator etwas bemerkt, gebe ich einfach eine Fehlermeldung aus und beende die Ausführung. Dies hat den zusätzlichen Vorteil, Nice mit wp-cli zu spielen:
Beispiel:
class testPlugin() {
...
static function activate() {
//[do some stuff here]
if ($error) {
die('Plugin NOT activated: ' . $error);
}
}
register_activation_hook( __FILE__, array( 'testPlugin', 'activate' ));
Da Sie den Titel aktualisiert haben, muss ich eine andere Antwort geben, die vorherige bitte nicht ignorieren, da sie noch einfacher ist als diese.
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;
}
}
Bitte beachten Sie, dass Sie beim Versuch, das Plugin zu aktivieren, mit der Datei plugins.php interagieren. Dort haben Sie eine große Auswahl an Aktionen, die Sie ausführen können.
Und falls Sie den Fehler $_GET['error']
gesetzt haben, haben Sie im Moment nur die vordefinierten Fehlermeldungen - Sie können keine eigene benutzerdefinierte Nachricht erstellen. Deshalb habe ich Ihnen diese Lösung vorgeschlagen.
Man kann die benutzerdefinierten Nachrichten als Administratorbenachrichtigungen an den WordPress-Kern vorschlagen, falls Plugins einige Anforderungen nicht erfüllen.
Im Grunde kannst du es nicht so machen, wie du willst. Alle WordPress-Formulare leiten nach Abschluss ihres Vorgangs um und generieren keine eigene Ausgabe. Daher wird die Fehlermeldung auf einer anderen Seitenanforderung generiert. Wenn Ihr Plugin zu diesem Zeitpunkt nicht aktiv ist, wird keine Meldung angezeigt. Eine weitere Komplikation ist, dass Plugins möglicherweise von Ajax aktiviert werden.
Eine hässliche, aber funktionierende Möglichkeit ist, die Aktivierung durch Generieren eines PHP-Fehlers zu unterbrechen, oder IIRC, was jede Ausgabe bewirkt. Sie können also einfach etwas wie "Versionsinkongruenz" im Aktivierungs-Hook des Plugins ausgeben, der im Fehlerausgabefeld angezeigt wird wird angezeigt, wenn die Aktivierung fehlschlägt.
Denken Sie darüber nach: Die Leute können Ihre Plug-in-Dateien einbinden oder sie durch Umgehen der Benutzeroberfläche oder Verwendung von wp-cli zwangsweise aktivieren. Abhängig von den Gründen, aus denen die Aktivierung fehlschlagen soll, ist es möglicherweise besser, nur die Fehlermeldung zu erhalten, als zu versuchen, die Aktivierung fehlzuschlagen
Wie wäre es mit diesem Code, um hello.php (Hello Dolly) zu unterdrücken, wenn WP <8.5:
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' );
}
}
Ich denke, das ist gut, weil es Sie nicht zwingt, Administratorbenachrichtigungen zu erstellen. Sie erhalten einfach die Rückmeldung über den Grund für den Abbruch der Plugin-Installation.
Ich habe diesen Code für HelloDolly hinzugefügt, aber Sie müssen ihn anpassen.