Belirli bir WP sürümü karşılanmadığında bir eklentiyi etkinleştirme işleminde durdurun, sonra admin_notices eylem kancasında hata iletisi gösterin


9

Belirli bir WP sürüm numarasını karşılamıyorsa etkinleştirmek istemediğim bir eklentiye sahibim, sonra admin_notices eylem kancasında hata mesajı gösteriyor. Bildiğim kadarıyla araştırdım, aşağıdaki kod bu hedefe ulaşmak en iyisidir:

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

Ama yine de yanlış yaptığımı düşünüyorum çünkü eklenti etkinleştirilmiş mesaj aynı zamanda atadığım hata uyarısı ile alıyorum.

Belirli bir WP sürümü karşılanmadığında etkinleştirme işlemindeki bir eklentiyi durdurma

Eklenti etkinleştirme işlemini düzgün bir şekilde durdurmak için uygun eylem kancası / filtresi ne olur, bu yüzden sadece hata mesajını alırım?


Plese @CarlAlberto cevabımı düşünüyor.
prosti

Yanıtlar:


6

Bu partiye geç olabilirim, ancak eklenti aktivasyonunu durdurmak ve WordPress'in yönetici bildirimlerinin gittiği bir hata mesajı göstermesini sağlamak için, sadece bir hata mesajı çıktıyorum ve yürütmeyi sonlandırıyorum. Bunun wp-cli ile güzel oynama avantajı vardır :

Eklenti aktivasyonu başarısız oldu

Misal:

class testPlugin() {

  ...

   static function activate() {

   //[do some stuff here]

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

}

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

2

Esasen, istediğiniz gibi yapamazsınız. Tüm wordpress formu, işlemlerini tamamladıktan sonra yeniden yönlendiriyor ve kendileri tarafından çıktı üretmiyorlar ve bu nedenle hata mesajı farklı bir sayfa isteğinde üretiliyor. Eklentiniz bu noktada etkin olmayacaksa, hiçbir mesaj görüntülenmez. Daha da karmaşık olan, eklentilerin Ajax tarafından etkinleştirilebilmesidir.

Çirkin ama çalışma yolu herhangi bir php hatası veya IIRC oluşturarak etkinleştirme başarısız olduğunu, böylece sadece eklenti etkinleştirme kanca "sürüm uyumsuzluğu" gibi bir şey çıktı alabilirsiniz, hata çıktı kutusunda görüntülenecek etkinleştirme başarısız olduğunda görüntülenir.

Düşünülmesi gereken bir şey: insanlar eklenti dosyalarınızı ekleyebilir veya bir şekilde UI'yi atlayarak veya wp-cli kullanarak zorla etkinleştirebilir. etkinleştirme işleminin başarısız olmasını istediğiniz nedenlere bağlı olarak, hata iletisine sahip olmak etkinleştirme işleminin başarısız olmasına çalışmaktan daha iyi olabilir


2

Başlığı güncellediğiniz için başka bir cevap vermem gerekiyor, bir öncekini görmezden gelmeyin çünkü bu daha da basit.

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

resim açıklamasını buraya girin

Eklentiyi etkinleştirmeye çalıştığınızda plugins.php dosyasıyla etkileşim kurduğunuzu lütfen unutmayın. Orada, yürütebileceğiniz büyük bir eylem anahtarınız var.

Ve $_GET['error']şu anda önceden belirlenmiş hata mesajlarına sahip olduğunuz hatayı ayarladıysanız , kendi özel mesajınızı oluşturamazsınız. Bu yüzden size böyle bir çözüm önerdim.

resim açıklamasını buraya girin

Eklentilerin bazı gereksinimleri karşılamaması durumunda özel mesajları WordPress çekirdeğine yönetici bildirimi olarak önerebilirsiniz.


3
Bu çalışmıyor. Eklenti etkin değilse, WP dosyadaki komut dosyalarını yürütmez, bu nedenle yönlendirme URL'sine basarken bağlanan işlev admin_noticestetiklenmez.
JakeParis

0

WP <8.5 ise hello.php (Hello Dolly) 'i bastırmak için bu kod hakkında:

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

Bunun iyi olduğunu düşünüyorum çünkü sizi yönetici bildirimleri oluşturmaya zorlamıyor. Sadece eklenti kurulumunun kürtaj nedeniyle ilgili geri bildirim alacaksınız.

Bu kodu HelloDolly için ekledim, ancak ayarlamanız gerekecek.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.