ওয়ার্ডপ্রেস আপডেট প্লাগিন হুক / অ্যাকশন? ৩.৯৯ সাল থেকে


15

আমি এটি কয়েকবার গবেষণা করেছি, তবুও আমার অনুসন্ধানে কাস্টম কোড ব্যতীত অনেক কিছুই প্রকাশিত হয় না যা ভাল ওয়ার্ডপ্রেস অনুশীলন বা নাও হতে পারে।

সর্বশেষ প্রকাশিত হিসাবে (ওয়ার্ডপ্রেস ৩.৯ "স্মিথ"), প্লাগইন আপডেট প্রক্রিয়ায় একটি হুক যুক্ত হয়েছে? আমি জিজ্ঞাসা করছি কারণ এটির একটি খুব প্রাথমিক প্রয়োজন, তবুও আমি এটি কোডেক্সে যুক্ত হয়নি (এখনও)। যদি তা না হয় তবে সাধারণ এবং সর্বোত্তম অনুশীলন বিকাশকারীরা কী নিয়োগ করে?

সম্পাদনা: কেবলমাত্র স্পষ্ট করে বলার জন্য, আমি অ্যাক্টিভেশন সম্পর্কে বলছি না, তবে আপডেট করার কথা বলছি, যদি ডাটাবেসে পরিবর্তন হয় বা অন্যথায় এটি সমাধান করা যায়।


এর প্রতিলিপি wordpress.stackexchange.com/questions/61456/...
drzaus

@ ড্রজউস উত্তরটি প্রদান করা ভাল একটি অনুশীলন নেই provided
রেনস টিলম্যান

@ রেনসটিলম্যান এটিকে যাইহোক যাইহোক 2 বছর অতিক্রান্ত হওয়ার বিষয়টি সমর্থন করে, লিঙ্কযুক্ত কিউ / এ মূলত একই উত্তর রয়েছে তবে এই প্রশ্নটির আরও 2 বছর পূর্বে পূর্বাভাস দেয়, সুতরাং 'নকল'।
ড্রাজাস

উত্তর:


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

আপনাকে ধন্যবাদ - আমি কেবল তখন সেই পদ্ধতিটি ব্যবহার করব। ডব্লিউপি সত্যিই এর জন্য একটি ক্রিয়া যুক্ত করতে হবে: ডি
ব্যবহারকারী 1915665

8
প্রযুক্তিগতভাবে আপনার ব্যবহার করার কথা register_activation_hook, কারণ বেশিরভাগ ক্ষেত্রেই আপনি যখনই অ্যাডমিন থেকে আপডেট করেন তখন একটি প্লাগইন নিষ্ক্রিয় / সক্রিয় হয়। plugins_loadedপ্রতি পৃষ্ঠার লোডে (চূড়ান্ত সহ) আপনার চেকটি করা হবে H পরিচয় করিয়ে দেওয়ার বিষয়ে কথা হয়েছিল register_update_hook, তবে কিছুক্ষণ আগে এটি ডাব্লুউন্টিক্স হিসাবে চিহ্নিত হয়েছিল । সেখানে আলোচনা সহায়ক।
drzaus

4
এটি বোঝা গুরুত্বপূর্ণ যে একটি ভর প্লাগইন আপডেট অ্যাক্টিভেশন হুকগুলি চালায় না - এটি হওয়া উচিত, তবে 3.9.2 এ হয় না। "গণ আপডেট" দ্বারা আমি ড্যাশবোর্ড আপডেট পৃষ্ঠা থেকে একটি আপডেট হয়েছি। প্লাগইন পৃষ্ঠার মধ্যে থেকে পৃথক আপডেটগুলি হুকগুলি ঠিকঠাক চালায়।
ব্রায়ান সি

4
জিনিসটি হ'ল প্লাগইনগুলি এফটিপি এর মাধ্যমেও আপডেট করা যেতে পারে যার অর্থ হুক কোনও অবস্থাতেই চালিত হবে না। এজন্য আপনাকে ডাটাবেসে সঞ্চিত বিকল্পটি অবলম্বন করতে হবে।
জিরাফ 1'15

4
@ জিরাফের মন্তব্যে প্রসারিত করার জন্য, এসভিএন বা গিটের মতো সোর্স নিয়ন্ত্রণ সহ তাদের কোড পরিচালনা করে এমন লোকদের ক্ষেত্রেও এটি সত্য। যে কারণে, এই উত্তর হয় সবচেয়ে ভালো উপায় আপগ্রেড হ্যান্ডেল করতে।
ডাবলশার্প

3

যে আলোচনা থেকে তারা আপগ্রেড করার জন্য নির্দিষ্ট কোনও কাস্টম হুক / ফাংশন যুক্ত না করার সিদ্ধান্ত নিয়েছে , এটি "বেশিরভাগ লোক" (4 বছর আগের হিসাবে) ব্যবহারের মতো শোনাচ্ছে register_activation_hook, যেহেতু অ্যাডমিন পৃষ্ঠার মাধ্যমে প্লাগইন আপগ্রেড করার সময় বলা হয়; তখন থেকে বেশিরভাগ উদাহরণগুলি আমি সেই প্রবণতাটি অনুসরণ করি।

বেশিরভাগ ব্যবহারের জন্য আমি পরামর্শ দিচ্ছি যে plugins_loadedএটি প্রতিটি পৃষ্ঠার বোঝাতে কল হবে as এটি ব্যতিক্রম আলোচনায় উল্লেখ করা হয়েছে: FTP / SVN এর মাধ্যমে আপগ্রেডের পথগুলি 'এজ কেসস', যেহেতু ডাব্লুপিপি প্লাগইনটি পরিবর্তন হয়েছে তা জানার জন্য কোনও ব্যবস্থা নেই, যার ক্ষেত্রে আগের উত্তরটি আরও প্রাসঙ্গিক হতে পারে।

একটি 'সাধারণ কাঠামো' উদাহরণ ব্যবহারের জন্য https://gist.github.com/zaus/c08288c68b7f487193d1 দেখুন register_activation_hook


register_activation_hookআপডেট চালানো যাবে নিশ্চিত করা হয় না দেখতে make.wordpress.org/core/2010/10/27/...
Flimm

খুব বেশি - ব্যবহার করবেন না plugins_loaded- প্রতিটি লোড চালায় এবং বোঝা / ধীর হতে পারে।
এলোমেলো_উজার_নাম

3

ওয়ার্ডপ্রেস ৩.৯ থেকে আপনি 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()ফাংশনটি ব্যবহার করে কাজটিকে ডিবিতে সেট করবে set upgrader_process_completeহুক কল করার সময় আপডেট কোড যুক্ত করার পরামর্শ দেওয়া হয় না ।
এরপরে, আপনি যদি অন্য প্রশাসকের পৃষ্ঠাতে ব্রাউজ করেন তবে plugins_loadedহুকটি কাজ করবে এবং আপডেট কোডটি সেখানে কাজ করবে।

দয়া করে নোট করুন যে আপডেট হুককে কাজ করতে এই প্লাগইনটি সক্রিয় করতে হবে।
এটি অ্যাক্টিভেট প্লাগইন নিয়ে কাজ করছে না, আপনি যদি প্লাগইন অ্যাক্টিভেটে কাজ করে এমন কোডটি চান তবে আপনাকে এটিকে register_activation_hook()ফাংশনে কোড করতে হবে ।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.