Stoppen Sie ein Plugin im Aktivierungsprozess, wenn eine bestimmte WP-Version nicht erfüllt ist, und zeigen Sie die Fehlermeldung im Aktions-Hook admin_notices an


9

Ich habe ein Plugin, das nicht aktiviert werden soll, wenn es eine bestimmte WP-Versionsnummer nicht erfüllt. 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 dem von mir zugewiesenen Fehlerhinweis die Plugin-aktivierte Meldung erhalte.

Stoppen Sie ein Plugin im Aktivierungsprozess, wenn eine bestimmte WP-Version nicht erfüllt ist

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


Bitte @CarlAlberto überlege mir meine Antwort.
Prosti

Antworten:


6

Ich kann zu spät zu dieser Party kommen, aber um die Plugin-Aktivierung zu stoppen und WordPress eine Fehlermeldung anzeigen zu lassen, wo die Administrator-Benachrichtigungen hingehen, gebe ich einfach eine Fehlermeldung aus und beende die Ausführung. Dies hat den zusätzlichen Vorteil, dass man mit wp-cli gut spielen kann :

Plugin-Aktivierung fehlgeschlagen

Beispiel:

class testPlugin() {

  ...

   static function activate() {

   //[do some stuff here]

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

}

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

2

Im Wesentlichen können Sie es nicht so machen, wie Sie wollen. Alle WordPress-Formulare werden nach Abschluss ihres Vorgangs umgeleitet 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 Methode besteht darin, die Aktivierung durch Generieren eines PHP-Fehlers fehlzuschlagen, oder IIRC wird jede Ausgabe ausführen. Sie können also einfach so etwas wie "Versionsinkongruenz" im Plugin-Aktivierungs-Hook ausgeben, der im Fehlerausgabefeld angezeigt wird wird angezeigt, wenn die Aktivierung fehlschlägt.

Denken Sie darüber nach: Die Leute könnten Ihre Plugin-Dateien einschließen oder sie auf irgendeine Weise gewaltsam aktivieren, indem sie die Benutzeroberfläche umgehen oder wp-cli verwenden. Abhängig von den Gründen, aus denen Sie die Aktivierung fehlschlagen möchten, ist es möglicherweise besser, nur die Fehlermeldung zu erhalten, als zu versuchen, die Aktivierung fehlzuschlagen


2

Da Sie den Titel aktualisiert haben, muss ich die 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;
    }
}

Geben Sie hier die Bildbeschreibung ein

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 gerade eingestellt $_GET['error']haben, haben Sie nur die vordefinierten Fehlermeldungen - Sie können keine eigene benutzerdefinierte Meldung erstellen. Deshalb habe ich Ihnen diese Lösung vorgeschlagen.

Geben Sie hier die Bildbeschreibung ein

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


3
Das funktioniert nicht. Wenn das Plugin nicht aktiv ist, führt WP die Skripte in der Datei admin_noticesnicht aus. Wenn Sie also auf die Umleitungs-URL klicken, wird die angehängte Funktion nicht ausgelöst.
JakeParis

0

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 das Feedback zum Grund für den Abbruch der Plugin-Installation.

Ich habe diesen Code für HelloDolly hinzugefügt, aber Sie müssen ihn anpassen.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.