it-swarm.com.de

Stoppen Sie ein Plugin im Aktivierungsprozess, wenn eine bestimmte WP Version ist nicht erfüllt, dann Fehlermeldung im Aktions-Hook admin_notices anzeigen

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.

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

Was wäre der richtige Aktions-Hook/Filter, um den Plugin-Aktivierungsprozess ordnungsgemäß zu stoppen, sodass ich nur die Fehlermeldung erhalte?

9
Carl Alberto

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:

 Plugin activation failed 

Beispiel:

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

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

 enter image description here 

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.

 enter image description here 

Man kann die benutzerdefinierten Nachrichten als Administratorbenachrichtigungen an den WordPress-Kern vorschlagen, falls Plugins einige Anforderungen nicht erfüllen.

2
prosti

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

2
Mark Kaplun

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.

0
prosti