सक्रियण प्रक्रिया में एक प्लगइन बंद करो जब एक निश्चित WP संस्करण पूरा नहीं होता है, तो admin_notices कार्रवाई हुक में त्रुटि संदेश दिखाएं


9

मेरे पास एक प्लगइन है जिसे मैं सक्रिय नहीं करना चाहता हूं यदि यह एक निश्चित 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 );
}

लेकिन मुझे लगता है कि मैं अभी भी इसे गलत कर रहा हूं क्योंकि मुझे उसी समय त्रुटि नोटिस के साथ प्लगइन सक्रिय संदेश मिल रहा है जिसे मैंने सौंपा था।

जब एक निश्चित WP संस्करण पूरा नहीं होता है तो सक्रियण प्रक्रिया में एक प्लगइन बंद करें

प्लगइन सक्रियण प्रक्रिया को ठीक से रोकने के लिए उचित एक्शन हुक / फ़िल्टर क्या होगा जिससे मुझे केवल त्रुटि संदेश मिलेगा?


Plese @CarlAlberto मेरे जवाब पर विचार करें।
वेश्या

जवाबों:


6

मुझे इस पार्टी में देर हो सकती है, लेकिन प्लगइन सक्रियण को रोकने और वर्डप्रेस में एक त्रुटि संदेश दिखाई देता है जहां व्यवस्थापक नोटिस जाते हैं, मैं बस एक त्रुटि संदेश आउटपुट करता हूं और निष्पादन को समाप्त करता हूं। यह wp-cli के साथ अच्छा खेलने का अतिरिक्त लाभ है :

प्लगिन सक्रियण विफल

उदाहरण:

class testPlugin() {

  ...

   static function activate() {

   //[do some stuff here]

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

}

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

2

अनिवार्य रूप से, आप इसे वैसे नहीं कर सकते जैसे आप चाहते हैं। सभी वर्डप्रेस फॉर्म अपनी प्रक्रिया को पूरा करने के बाद पुनर्निर्देशित कर रहे हैं और अपने आप से आउटपुट उत्पन्न नहीं करते हैं और इसके बाद एक अलग पेज अनुरोध पर त्रुटि संदेश उत्पन्न होता है। यदि आपका प्लगइन उस बिंदु पर सक्रिय नहीं होगा, तो कोई संदेश प्रदर्शित नहीं होगा। इसके अलावा जटिलता यह है कि प्लग अजाक्स द्वारा सक्रिय किया जा सकता है।

एक बदसूरत लेकिन काम करने का तरीका एक php त्रुटि उत्पन्न करके सक्रियण को विफल करना है, या IIRC कोई भी आउटपुट करेगा, इसलिए आप प्लगइन सक्रियण हुक में "संस्करण बेमेल" जैसा कुछ आउटपुट कर सकते हैं, जिसे त्रुटि आउटपुट बॉक्स में प्रदर्शित किया जाएगा। सक्रियण विफल होने पर प्रदर्शित किया जा रहा है।

कुछ सोचने के लिए: लोग आपकी प्लगइन फ़ाइलों को शामिल कर सकते हैं, या किसी तरह यूआई को दरकिनार करके या wp-cli का उपयोग करके इसे बलपूर्वक सक्रिय कर सकते हैं। जिन कारणों से आप सक्रियण को विफल करना चाहते हैं, उनके आधार पर, केवल त्रुटि संदेश के सक्रियण को विफल करने की कोशिश करने से बेहतर हो सकता है


2

चूंकि आपने शीर्षक को अपडेट किया था इसलिए मुझे एक और उत्तर देने की आवश्यकता है, पिछले एक को अनदेखा न करें क्योंकि यह इस से भी अधिक सरल है।

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']समय आपके पास सिर्फ पूर्वनिर्धारित त्रुटि संदेश हैं - आप अपना स्वयं का कस्टम संदेश नहीं बना सकते। यही कारण है कि मैंने आपको इस तरह से समाधान का प्रस्ताव दिया।

यहाँ छवि विवरण दर्ज करें

कुछ कस्टम आवश्यकताओं के पूरा नहीं होने की स्थिति में कस्टम संदेशों को वर्डप्रेस कोर को व्यवस्थापक नोटिस के रूप में प्रस्तावित कर सकता है।


3
यह काम नहीं करता। यदि प्लगइन सक्रिय नहीं है, तो WP फ़ाइल में स्क्रिप्ट को निष्पादित नहीं करेगा, इसलिए, रीडायरेक्ट यूआरएल को मारते समय, फ़ंक्शन को admin_noticesनिकाल नहीं दिया जाता है।
जेकपैरिस

0

यदि इस कोड के बारे में hello.php (हैलो डॉली) को दबाने के बारे में अगर 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' );
      }
 }

मुझे लगता है कि यह अच्छा है क्योंकि यह आपको व्यवस्थापक नोटिस बनाने के लिए मजबूर नहीं करता है। आप बस प्लगइन स्थापित करने के गर्भपात के कारण के बारे में प्रतिक्रिया प्राप्त करेंगे।

मैंने इस कोड को HelloDolly के लिए जोड़ा है, लेकिन आपको समायोजित करने की आवश्यकता होगी।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.