वर्डप्रेस अपडेट प्लगइन हुक / एक्शन? 3.9 के बाद से


15

मैंने कुछ बार इस पर शोध किया है, फिर भी मेरी खोज में कस्टम कोड को छोड़कर ज्यादा कुछ नहीं है जो कि अच्छा वर्डप्रेस अभ्यास हो सकता है या नहीं भी हो सकता है।

नवीनतम रिलीज़ (वर्डप्रेस 3.9 "स्मिथ") के अनुसार, प्लगइन अपडेट प्रक्रिया में एक हुक जोड़ा गया है? मैं पूछ रहा हूं क्योंकि इसकी बहुत बुनियादी जरूरत है, फिर भी मैं इसे कोडेक्स (अभी तक) में नहीं देखता हूं। यदि नहीं, तो सामान्य और सबसे अच्छा अभ्यास डेवलपर्स क्या है?

संपादित करें: बस स्पष्ट करने के लिए, मैं सक्रियण के बारे में बात नहीं कर रहा हूं, लेकिन अद्यतन करने के बारे में, इस तरह, अगर डेटाबेस में परिवर्तन होते हैं या अन्यथा इसे संबोधित किया जा सकता है।



@drzaus जवाब है कि वहाँ एक अच्छा अभ्यास नहीं है।
रेंस टिलमैन

@RensTillmann वैसे भी 2 साल से पुराना है, लिंक किया हुआ q / मूल रूप से एक ही उत्तर है, लेकिन इस प्रश्न को दूसरे 2 वर्षों से पहले से बताता है, इसलिए 'डुप्लिकेट' है।
drzaus

जवाबों:


16

मुझे नहीं लगता कि कोई कार्रवाई जोड़ी गई है। आप किसी भी संस्करण के लिए संस्करण विवरण देख सकते हैं और किसी भी नए कार्यों को जोड़ सकते हैं।

प्लगइन अपडेट पर कोड चलाने का वर्डप्रेस तरीका यहाँ वर्णित है :

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

और यहाँ कोड उदाहरण के साथ :

function myplugin_update_db_check() {
    global $jal_db_version;
    if (get_site_option( 'jal_db_version' ) != $jal_db_version) {
        jal_install();
    }
}
add_action( 'plugins_loaded', 'myplugin_update_db_check' );

धन्यवाद - मैं बस उस विधि का उपयोग करूँगा। WP को वास्तव में इसके लिए एक क्रिया जोड़ना है: D
user1915665

8
तकनीकी रूप से आप उपयोग करने वाले हैं register_activation_hook, क्योंकि ज्यादातर मामलों में जब भी आप व्यवस्थापक से इसे अपडेट करते हैं , तो एक प्लगइन निष्क्रिय / सक्रिय हो जाता है। हुकिंग plugins_loadedआपके पेज लोड (फ्रंटएंड सहित) पर आपका चेक करेगा। शुरू करने के बारे में बात की गई थी register_update_hook, लेकिन इसे थोड़ी देर पहले WONTFIX के रूप में चिह्नित किया गया था। वहां की चर्चा सहायक है।
drzaus

4
यह समझना महत्वपूर्ण है कि एक मास प्लगइन अपडेट सक्रियण हुक नहीं चलाता है - यह होना चाहिए, लेकिन 3.9.2 पर नहीं है। "बड़े पैमाने पर अपडेट" से मेरा मतलब डैशबोर्ड अपडेट पेज से किया गया अपडेट है। प्लगइन पेज के भीतर से किए गए अलग-अलग अपडेट हुक ठीक हैं।
ब्रायन सी।

4
बात प्लगइन्स एफ़टीपी के माध्यम से भी अपडेट की जा सकती है जिसका मतलब है कि हुक किसी भी स्थिति में निकाल नहीं दिया जाएगा। इसलिए आपको डेटाबेस में संग्रहीत विकल्प का सहारा लेना होगा।
जिराफ

4
@ जिराफ की टिप्पणी पर विस्तार करने के लिए, उन लोगों के लिए सच है जो अपने कोड को SVN या Git जैसे स्रोत नियंत्रण के साथ प्रबंधित करते हैं। इस कारण से, इस सवाल का जवाब है सबसे अच्छा तरीका है उन्नयन को संभालने के लिए।
युगलप्लप

3

से चर्चा जहां वे एक कस्टम हुक / समारोह विशिष्ट उन्नत करने के लिए जोड़ने के लिए नहीं करने का फैसला , यह "ज्यादातर लोगों" की तरह लगता है का उपयोग करें (4 साल पहले के रूप में) register_activation_hookहै, क्योंकि यह जब एक प्लगइन व्यवस्थापक पृष्ठ के माध्यम से उन्नत बनाया है कहा जाता है; सबसे अधिक उदाहरण मैंने तब से देखे हैं जब वह उस प्रवृत्ति का अनुसरण करता है।

अधिकांश उपयोग के लिए मैं सुझाव देना चाहूंगा कि plugins_loadedइसके माध्यम से हुकिंग न करें , क्योंकि यह हर पेज लोड पर कहा जाएगा। इसका अपवाद चर्चा में उल्लिखित है: FTP / SVN के माध्यम से अपग्रेड पथ 'किनारे के मामले' हैं, क्योंकि WP में यह जानने के लिए कोई तंत्र नहीं होगा कि प्लगइन बदल गया है, इस स्थिति में पिछला उत्तर अधिक प्रासंगिक हो सकता है।

'सिंपल फ्रेमवर्क' उदाहरण का उपयोग करने के लिए https://gist.github.com/zaus/c08288c68b7f487193d1 देखें register_activation_hook


register_activation_hookअद्यतन पर चलने के लिए इसकी गारंटी नहीं है, को देखने के make.wordpress.org/core/2010/10/27/...
Flimm

बहुत अधिक - उपयोग न करें plugins_loaded- हर भार को चलाता है, और बोझ / धीमा हो सकता है।
random_user_name

3

वर्डप्रेस 3.9 के बाद से आप upgrader_process_completeहुक का उपयोग कर सकते हैं ।
संदर्भ 1 , 2 देखें

यहाँ एक उदाहरण कोड है:

<?php 
/**
 * Plugin Name: Test plugin 1
 * Plugin URI: http://rundiz.com
 * Description: A very simple plugin for testing. This plugin do nothing.
 * Version: 0.1.8
 * Author: Vee Winch
 * Author URI: http://rundiz.com
 * License: MIT
 * License URI: https://opensource.org/licenses/MIT
 * Text Domain: test-plugin1
 * Domain Path: 
 */


$wppstp1_version = '0.1.8';


add_action('upgrader_process_complete', 'wppstp1_upgrade', 10, 2);// will working only this plugin activated.
function wppstp1_upgrade(\WP_Upgrader $upgrader_object, $hook_extra)
{
    global $wppstp1_version;

    if (is_array($hook_extra) && array_key_exists('action', $hook_extra) && array_key_exists('type', $hook_extra) && array_key_exists('plugins', $hook_extra)) {
        // check first that array contain required keys to prevent undefined index error.
        if ($hook_extra['action'] == 'update' && $hook_extra['type'] == 'plugin' && is_array($hook_extra['plugins']) && !empty($hook_extra['plugins'])) {
            // if this action is update plugin.
            $this_plugin = plugin_basename(__FILE__);

            foreach ($hook_extra['plugins'] as $each_plugin) {
                if ($each_plugin == $this_plugin) {
                    // if this plugin is in the updated plugins.
                    // don't process anything from new version of code here, because it will work on old version of the plugin.
                    file_put_contents(WP_CONTENT_DIR . '/test.txt', 'v'.$wppstp1_version."\r\n", FILE_APPEND); // you will always get the previous version even you update to the new version.
                    // set transient to let it run later.
                    set_transient('wppstp1_updated', 1);
                }
            }// endforeach;
            unset($each_plugin);
        }// endif update plugin and plugins not empty.
    }// endif; $hook_extra
}// wppstp1_upgrade


add_action('plugins_loaded', 'wppstp1_runUpdatedPlugin');
function wppstp1_runUpdatedPlugin()
{
    global $wppstp1_version;

    if (get_transient('wppstp1_updated') && current_user_can('manage_options')) {
        // if plugin updated and current user is admin.
        file_put_contents(WP_CONTENT_DIR . '/test-update-by-transient.txt', 'v'.$wppstp1_version."\r\n", FILE_APPEND);// you will always get the updated version here.

        // update code here.

        // delete transient.
        delete_transient('wppstp1_updated');
    }
}// wppstp1_runUpdatedPlugin

एक बार प्लगइन अपडेट हो जाने पर, यह set_transient()फ़ंक्शन का उपयोग करके कार्य को db में सेट करेगा । upgrader_process_completeहुक को कॉल करते समय अपडेट कोड जोड़ने की अनुशंसा नहीं की जाती है ।
अगला, यदि आप अन्य व्यवस्थापक पृष्ठ पर ब्राउज़ करते हैं, तो plugins_loadedहुक काम करेगा और अपडेट कोड वहां काम करेगा।

कृपया ध्यान दें कि अपडेट हुक काम करने के लिए इस प्लगइन को सक्रिय होना चाहिए।
यह सक्रिय प्लगइन पर काम नहीं कर रहा है, इसलिए यदि आप चाहते हैं कि कोड जो कि प्लगइन को सक्रिय करने पर काम करता है, तो आपको इसे register_activation_hook()फ़ंक्शन में कोड करना होगा ।

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