براتی طراح سایت

قابلیت بروزرسان خودکار افزونه وردپرسی

مشخصات مقاله:
بروزرسانی: مرداد ۱۴۰۴
قابلیت بروزرسان خودکار افزونه وردپرسی
فهرست مطالب

خلاصه:

بوسیله کد آماده و هوش مصنوعی خیلی راحت افزونه وردپرسی خودرا آپدیدت کنید

بوسیله کد اموزشی بروزرسان اتومات افزونه بوسیله ویدیو اموزشی
بوسیله کد هوش مصنوعی آپدیدت دستی افزونه حرفه ای تر
 
 

قابلیت بروزرسان خودکار افزونه وردپرسی چیست؟

قابلیت بروزرسان خودکار افزونه وردپرسی امکانی که در نهایت باعث میشود کاربر یا خریدار افزونه شما از طریق صفحه پلاگین یا افزونه ها بصورت خودکار و با یک دکمه براحتی به اخرین نسخه ورژن سایت وردپرسی دست پیدا کند.
  • سهولت آپدیدت
  • نشان از دانش برنامه نویس طراح افزونه
  • حرفه ای بودن افزونه
  • گران تر شدن پلاگین

قابلیت اپدیدت دار کردن افزونه

فعال‌سازی بروزرسانی افزونه 

  1. ابتدا میبایست یک افزونه بسازید : ساخت افزونه با هوش مصنوعی
  2. سپس افزونه خودرا به این قابلیت بروزرسان اتومات مجهز کنید
  3. گام به گام از طرق ویدیو اموزشی
  4. سپس در هاست شخصی افزونه اپدیدت خودرا اپلود کنید
  5. فایل update.jason بسازید
  6. کدهای بروزرسان را + افزونه خودتان در یک فایل به هوش مصنوعی دهید
  7. پرامپت بزنید که نام و جزییات و اسلاگ … افزونه را با کدهای بروزرسان جایگزین کند
  8. مسیر کامل ساخت فولدر و فایل jason هم از ai بگیرید
  9. عکس یا اسکرین شات همزمان با کد ها برای ai ارسال کنید
  10. بمنظور تحلیل بهتر افزونه و دقت در عدم خطای افزونه
  11. از ai های مختلف استفاده کنید و صبور باشید
  12. فایل نهایی شما اماده است

مراحل بروزرسانی پلاگین 

برای فعال‌سازی سیستم بروزرسانی در افزونه وردپرس، کافی است کلاس ها را در فایل اصلی افزونه خود فرا خوانی کنید تا فیلترها و اکشن‌های لازم ثبت شوند. با تعریف ثابت‌های _VERSION و _BASENAME قبل از این کلاس، مسیر و نسخه‌ی افزونه به‌درستی شناسایی می‌شود.🚀

در ادامه، با افزودن فیلتر update_plugins، درخواست‌های به‌روزرسانی به‌سمت سرور شما هدایت شده و در صورت وجود نسخه‌ی جدید، کاربر با اطلاعیه‌ای مناسب روبه‌رو می‌شود.

آموزش آپدیت افزونه 

برای آموزش قابلیت بروزرسان خودکار افزونه وردپرسی، ابتدا باید فایل update.json را در هاست خود آپلود کنید؛ این فایل شامل اطلاعات نسخه، لینک دانلود و بخش‌های changelog و description است.📚
سپس آدرس آن را در متغیر $update_api کلاس خود تنظیم کنید. بعد از آن، با فراخوانی تابع wp_remote_get و بررسی نتیجه، می‌توانید نسخه‌ی جدید را شناسایی و بسته‌ی بروزرسانی را به‌دست کاربر برسانید.
در نهایت با فیلتر plugins_api جزئیات بیشتر نسخه‌ی جدید نمایش داده می‌شود و تجربه کاربری به‌صورت حرفه‌ای بهبود می‌یابد. 😊

ساخت افزونه با قابلیت آپدیت 

اگر قصد دارید از ابتدا افزونه‌ای بسازید که قابلیت بروزرسانی خودکار داشته باشد، باید سه مرحله کلیدی را طی کنید:⚙️

  1. تعریف ثابت‌های اصلی افزونه و فراخوانی کلاس بروزرسانی.
  2. آماده‌سازی فایل JSON مورد نیاز و قرار دادن آن در یک سرور یا هاست اختصاصی.
  3. ثبت فیلترها و اکشن‌ها در داخل سازنده‌ی کلاس تا وردپرس بتواند به‌صورت خودکار نسخه‌ها را بررسی کند.
    با رعایت این ساختار، افزونه‌ی شما همزمان قابل ارتقا و حفظ امنیت خواهد بود.

بروزرسانی خودکار افزونه با هوش مصنوعی

اینکار سختی های خاص خودش و دانش فنی بالایی میخاد ولی بوسیله بروزرسانی خودکار افزونه با هوش مصنوعی میتوان اینکار را انجام داد- کافیه که مراحل زیر را دنبال کنید😉

  1. پرامپت صحیح بدید
  2. همزمان نیمه بالایی افزوته – کدهای پلاگین باشد
  3. همزمان نیمه پایین افزوته – کدهای بروزررسان باشد
  4. یک عکس مثل نمونه اسکرین شات بگیریذ
  5. ودر نهایت برای ai ارسال کنید 

خودش اتومات نام های افزونه کلاس ها و… جایگزین مینماید و کد اصلاحیه میدهد!

عکس نمونه

 

افزودن قابلیت آپدیت به افزونه 

برای افزودن قابلیت آپدیت به افزونه‌های قدیمی، کافی است کلاس بروزرسانی را به فایل اصلی افزونه اضافه کرده و ثابت‌های مورد نیاز را تعریف کنید.🛠️
سپس فیلدهای متنی و لینک‌های لازم را در بخش متاهای افزونه در صفحه‌ی افزونه‌ها نمایش دهید تا کاربران بتوانند با کلیک بر روی «بررسی بروزرسان» از نسخه‌ی جدید مطلع شوند.
با این روش، حتی کاربران حرفه‌ای هم می‌توانند بدون کدنویسی اضافی، افزونه‌ی شما را به‌روز نگه دارند.

مقاله مرتبط:  نمایش نوار اطلاعیه سفارشی در پیشخوان وردپرس با کد

کدنویسی سیستم آپدیت افزونه 

کدنویسی قسمت اصلی بررسی نسخه شامل فراخوانی wp_remote_get برای دریافت JSON، بررسی version_compare و سپس افزودن اطلاعات به $transient->response است.💻برای جزئیات بیشتر می‌توانید بخش check_for_updates کلاس را بررسی کنید؛ این تابع با اطمینان از صحت پاسخ سرور و نسخه‌ی دریافتی، دستور بروزرسانی را صادر می‌کند.

کدها:


// =================================================================
// قسمت بالایی هدر افزونه + همه کدهاتون اینجا باشد
// =================================================================



// =================================================================
// شروع بخش بروزرسانی افزونه (نسخه آموزشی نهایی مهندس براتی https://mrbarati.com)
// =================================================================

// راهنما: ((۷بار ۳ایکس بزرگ استفاده شده))  - (۸بار ۳ایکس کوچک استفاده شده)
// ۱. هر کجا  در این فایل XXX را می‌بینید، آن را با "نام رسمی و پاسکال‌کیس" افزونه خود (مثلاً: MyAwesomePlugin) جایگزین کنید.
// ۲.  کجا x-x-x را می‌بینید، آن را با "شناسه" افزونه خود (مثلاً: my-awesome-plugin) جایگزین کنید.مثل کد ملی شماست؛ تمام سیستم‌های خارج از کلاس (وردپرس، مرورگر، سرور) از آن برای شناسایی دقیق شما استفاده می‌کنند 

class XXX_Updater {
    
    // راهنما: این آدرس را به آدرس فایل update.json روی سرور خودتان تغییر دهید.
    private $update_api = 'https://your-domain.com/path/to/your/update.json';
    private $plugin_slug;
    private $plugin_version;
    private $plugin_file;

    public function __construct() {
        // راهنمای مهم: دو ثابت زیر باید در فایل اصلی افزونه شما (قبل از فراخوانی این کلاس) تعریف شده باشند.
        // define('WP_XXX_VERSION', '1.0.0');
        // define('WP_XXX_PLUGIN_BASENAME', plugin_basename(__FILE__));
        
        $this->plugin_slug = dirname(WP_XXX_PLUGIN_BASENAME);
        $this->plugin_file = WP_XXX_PLUGIN_BASENAME;
        $this->plugin_version = WP_XXX_VERSION;

        add_filter('pre_set_site_transient_update_plugins', [$this, 'check_for_updates']);
        add_filter('plugins_api', [$this, 'plugin_update_details'], 10, 3);
        add_filter('plugin_row_meta', [$this, 'add_plugin_meta_links'], 10, 2);
        add_action('admin_enqueue_scripts', [$this, 'enqueue_assets']);
        
        // راهنما: نام این اکشن باید منحصر به فرد باشد. از شناسه افزونه خود در آن استفاده کنید.
        add_action('wp_ajax_x_x_x_check_update', [$this, 'handle_manual_update_check']);
    }

    public function add_plugin_meta_links($links, $file) {
        if ($file === $this->plugin_file) {
            // راهنما: شناسه (id) این لینک باید منحصر به فرد باشد.
            $update_link = '<a href="#" id="x-x-x-check-update" style="color:#0073aa; font-weight: normal;">بررسی بروزرسان</a>';
            $links[] = $update_link;
        }
        return $links;
    }
    
    public function enqueue_assets($hook) {
        if ('plugins.php' !== $hook) return;
        add_action('admin_footer-plugins.php', [$this, 'print_ajax_script']);
    }

    public function print_ajax_script() {
        // راهنما: نام این nonce باید منحصر به فرد باشد.
        $nonce = wp_create_nonce('x_x_x_update_nonce');
        ?>
        <div id="x-x-x-toast" style="display:none; position: fixed; bottom: 30px; left: 50%; transform: translateX(-50%); background-color: #333; color: white; padding: 16px 24px; border-radius: 6px; z-index: 10000;"></div>
        <script type="text/javascript">
        jQuery(document).ready(function($) {
            $('#x-x-x-check-update').on('click', function(e) {
                e.preventDefault();
                var button = $(this), toast = $('#x-x-x-toast'), originalText = button.html();
                button.html('در حال بررسی... <span class="spinner is-active" style="display: inline-block; vertical-align: middle;"></span>');
                $.ajax({
                    url: ajaxurl, type: 'POST',
                    data: { action: 'x_x_x_check_update', _ajax_nonce: '<?php echo $nonce; ?>' },
                    success: function(response) {
                        if (response.success) {
                            toast.css('background-color', '#27ae60').text(response.data.message).fadeIn();
                            setTimeout(function() { window.location.reload(); }, 2500);
                        } else {
                            toast.css('background-color', '#c0392b').text(response.data.message).fadeIn();
                            button.html(originalText);
                        }
                    },
                    error: function() {
                        toast.css('background-color', '#c0392b').text('خطا در ارتباط.').fadeIn();
                        button.html(originalText);
                    },
                    complete: function() { setTimeout(function() { toast.fadeOut(); }, 4000); }
                });
            });
        });
        </script>
        <?php
    }

    public function handle_manual_update_check() {
        check_ajax_referer('x_x_x_update_nonce', '_ajax_nonce');
        delete_site_transient('update_plugins');
        wp_update_plugins();
        $update_data = get_site_transient('update_plugins');
        if (isset($update_data->response[$this->plugin_file])) {
            wp_send_json_success(['message' => 'نسخه جدید یافت شد.']);
        } else {
            wp_send_json_success(['message' => 'شما از آخرین نسخه استفاده می‌کنید.']);
        }
    }

    public function check_for_updates($transient) {
        if (empty($transient->checked)) return $transient;
        $response = wp_remote_get($this->update_api, ['timeout' => 15]);
        if (is_wp_error($response) || 200 !== wp_remote_retrieve_response_code($response)) return $transient;
        $remote_info = json_decode(wp_remote_retrieve_body($response));
        if (!$remote_info || !isset($remote_info->version)) return $transient;
        if (version_compare($remote_info->version, $this->plugin_version, '>')) {
            $transient->response[$this->plugin_file] = (object)[
                'slug' => $this->plugin_slug, 'plugin' => $this->plugin_file,
                'new_version' => $remote_info->version, 'package' => $remote_info->download_link,
                'url' => $remote_info->homepage,
            ];
        }
        return $transient;
    }

    public function plugin_update_details($result, $action, $args) {
        if ($action !== 'plugin_information' || !isset($args->slug) || $args->slug !== $this->plugin_slug) return $result;
        $response = wp_remote_get($this->update_api, ['timeout' => 15]);
        if (is_wp_error($response) || 200 !== wp_remote_retrieve_response_code($response)) return $result;
        $remote_info = json_decode(wp_remote_retrieve_body($response));
        if ($remote_info) {
             return (object)[
                'name' => $remote_info->name, 'slug' => $this->plugin_slug, 'version' => $remote_info->version,
                'author' => $remote_info->author, 'homepage' => $remote_info->homepage, 'download_link' => $remote_info->download_link,
                'sections' => ['description' => $remote_info->sections->description ?? '', 'changelog' => $remote_info->sections->changelog ?? '']
            ];
        }
        return $result;
    }
}

// راهنما: برای فعال کردن این سیستم، در انتهای فایل اصلی افزونه خود،
// یک نمونه از کلاسی که در بالا تعریف کردید، ایجاد کنید.
// نام کلاس باید با نامی که در بالا انتخاب کردید، یکی باشد.
new XXX_Updater();

// =================================================================
// پایان بخش بروزرسانی
// =================================================================

پلاگین با امکان آپدیت خودکار

طراحی پلاگین با امکان آپدیت نیازمند ثبت متادیتای نسخه، لینک دانلود و توضیحات در update.json و همچنین اعمال فیلترهای لازم در وردپرس است.🔌پس از نصب پلاگین، کاربران می‌توانند از صفحه‌ی افزونه‌ها به سادگی نسخه‌های جدید را مشاهده و اقدام به بروزرسانی کنند.

مقاله مرتبط:  آموزش نصب وردپرس روی هاست دایرکت ادمین

افزودن قابلیت بروزرسان افزونه وردپرسی

ساختار استاندارد بروزرسانی پلاگین 

ساختار استاندارد کدها شامل موارد زیر است:🧩

  • فایل json با فیلدهای name، version، download_link و sections
  • کلاس PHP برای مدیریت درخواست‌های بروزرسانی
  • اسکریپت AJAX برای بررسی و اعمال بروزرسانی دستی

راه‌اندازی سیستم آپدیت 

برای راه‌اندازی سیستم آپدیت و افزودن قابلیت بروزرسان خودکار افزونه وردپرسی کافیست:🔧

  1. فایل JSON را در هاست شخصی خود قرار دهید.
  2. آدرس آن را در $update_api وارد کنید.
  3. کلاس بروزرسانی را در فایل اصلی افزونه instantiate کنید.
    با این سه مرحله ساده، سیستم بروزرسانی شما فعال و آماده‌ی کار خواهد بود. 😃

اتصال افزونه به سرور آپدیت 

در تنظیمات $update_api آدرس کامل فایل JSON را وارد کنید تا کلاس بتواند به‌درستی به سرور شما متصل شود.
از توابع wp_remote_get و wp_remote_retrieve_body برای واکشی محتوا استفاده کنید و حتماً کد وضعیت ۲۰۰ را بررسی نمایید تا از مشکلات اتصال جلوگیری شود.🌐

آپدیت افزونه از آدرس اختصاصی 

با بهره‌گیری از هاست شخصی یا ساب‌دامین اختصاصی،هاست دانلود …. می‌توانید فایل update.json را در مسیر https://domain.com/path/update.json نگهداری کنید.🗂️
این روش امنیت بالاتری دارد و می‌توانید دسترسی به فایل‌ها را از طریق تنظیمات سرور محدود کنید.

  • از طریق کنترل پنل در مسیر دلخواه یک فولدر با نام دلخواه بسازید
  • از ترکیب اعداد و حروف نامشخص استفاده کنید
  • داخل فولدر شما باید دو فایل باشد
  • الف : فایل update.jason
  • ب: فایل plugin-name.zip

نمایش جزییات نسخه افزونه 

در فایل JSON بخش sections شامل description و changelog است که جزئیات نسخه‌های قدیم و جدید را نمایش می‌دهد.📦در پنل مدیریت وردپرس، کاربر می‌تواند با کلیک روی «جزئیات بیشتر» به این اطلاعات دسترسی یابد و تغییرات هر نسخه را مطالعه کند.

  • ثبت تغییرات

منبع اصلی افزونه ها : مخزن وردپرس

نمایش بروزرسان پلاگین

پلاگین قابل ارتقا وردپرس 

افزونه‌ی شما علاوه بر بروزرسانی خودکار، باید قابلیت نصب دستی نسخه‌های جدید را نیز داشته باشد.🔝
با افزودن لینک دانلود و بررسی نسخه در صفحه‌ی افزونه‌ها، امکان ارتقا بدون نیاز به حذف و نصب مجدد فراهم می‌شود که این وییگی در کدهای مربوطه پیاده سده است

افزودن API برای آپدیت افزونه 

اگر می‌خواهید دسترسی به بروزرسانی را کنترل‌شده مدیریت کنید، می‌توانید یک API ساده برای اعتبارسنجی درخواست‌ها ایجاد کنید.🔗این API می‌تواند توکن یا کلید API پذیرش کند و در صورت معتبر بودن کاربر، اطلاعات نسخه را در اختیار کلاس قرار دهد. 🎯

البته ما api خاصی برای سادگی بیشتر قابلیت اپدیت طراحی نکردیم!بلکه همون ادرس لینک به فایل jason

افزونه با ویژگی بررسی نسخه جدید 

در بخش متاهای افزونه، با استفاده از لینک «بررسی بروزرسان» و اسکریپت AJAX، کاربر می‌تواند هر زمان که بخواهد نسخه جدید را چک کند.🔍پیام نمایش داده شده در Toast اطلاع می‌دهد که آیا نسخه جدید موجود است یا فعلاً از آخرین نسخه استفاده می‌کند.

بروزرسانی دستی افزونه 

علاوه بر بروزرسانی خودکار، دکمه‌ی «بررسی بروزرسان» امکان آپدیت دستی را فراهم می‌کند.🖱️با کلیک روی این دکمه، درخواست AJAX ارسال شده و در پایان صفحه ریفرش می‌شود تا نسخه‌ی جدید نصب شود.

افزودن قابلیت بروزرسان افزونه وردپرسی

انجام بروزرسانی

از آنجایی که نسخه ۵.۰.۰ بزرگتر از ۴.۰.۱ است، وردپرس متوجه می‌شود که یک بروزرسانی در دسترس است و پیغام بروزرسانی را به کاربر در پلاگین نمایش می‌دهد. انجام بروزرسانی: وقتی کاربر روی دکمه “هم‌اکنون به‌روزرسانی نمایید” کلیک می‌کند، وردپرس به صورت خودکار فایل فشرده (zip) نسخه جدید را از download_link موجود در فایل json شما دانلود کرده و جایگزین فایل‌های قدیمی افزونه روی سایت خودش می‌کند.

مقاله مرتبط:  پیش بینی رتبه یک گوگل

نکته: افزونه اپلودی قبلی را حذف کنید در هاست دانلود!

ویژگی دریافت آپدیت افزونه

مهم‌ترین ویژگی دریافت آپدیت افزونه شما، دریافت بی‌دردسر بسته‌ی بروزرسانی و نصب خودکار آن است.📥

حروف چسبیده بهم مثل: WPEditorLockers

(قالب پاسکال‌کیس / PascalCase): این مانند “اسم رسمی و کامل” یک شخص است. یک نام زیبا و خوانا که در مکالمات و معرفی‌ها استفاده می‌شود. در برنامه‌نویسی، ما از این قالب برای نام‌گذاری کلاس‌ها (class) در PHP استفاده می‌کنیم، چون خوانا و باوقار است

حروف جدا با علامت – مثل:wp-editor-lockers

(قالب کباب‌کیس / kebab-case): این مانند “کد ملی” یا “نام کاربری” یک شخص است. یک شناسه منحصر به فرد، بدون فاصله، با حروف کوچک که سیستم‌ها (مانند فایل سیستم‌ها، URL‌ها و پایگاه داده) به راحتی می‌توانند با آن کار کنند. این قالب برای شناسایی و آدرس‌دهی استفاده می‌شود.

خدمات پشتیبانی سایت وردپرسی
بعد از تکمیل فرم وبررسی اولیه باشما تماس می گیرم

خطای بروزرسانی افزونه “شبح بروزرسان”

خطای شبح: این مشکل تقریباً همیشه به یک دلیل ساده رخ می‌دهد: شماره نسخه‌ای که در فایل PHP افزونه نوشته شده، با شماره نسخه‌ای که در فایل update.json روی سرور شما قرار دارد، یکی نیست.

خطای ۴۰۴: باید وقتی لینک فایل php.zip افزونه خود را در مروزگر میزنید :شروع به دانلود کندوگرنه مشکل دارید

ساختار صحیح پوشه و فایل ZIP

 در کامپیوتر خود، یک پوشه جدید با نام wp-editor-lockers (حروف کوچک) بسازید. فایل PHP اصلاح‌شده (wp-editor-lockers.php) را داخل این پوشه قرار دهید. حالا خودِ پوشه wp-editor-lockers را زیپ کنید. نام فایل ZIP نهایی باید wp-editor-lockers.zip باشد.

 

ساختار صحیح فایل ZIP شما باید به این شکل باشد:

فولدر اصلی /   فولدر افزونه    /   فایل php.zip

گام چهارم: بارگذاری در هاست به هاست خود در مسیر public_html/wp-content/ بروید. پوشه wp-editor-lockers-w45 را باز کنید. تمام محتویات قبلی آن را پاک کنید. دو فایل جدید را در این پوشه آپلود کنید

افزودن وِیژگی بروزرسان خودکار به افزونه

دسترسی‌ها (Permissions) هاست شخصی

  • پوشه wp-editor-lockers-w45: 755
  •  فایل update.json: 644
  •  فایل wp-editor-lockers.zip: 644
  • فایل htaccess    : ۶۴۴.

امنیت بروزرسان افزونه 

برای بحث امنیت در قابلیت بروزرسان خودکار افزونه وردپرسی ! باید کدرا در هاست شخصی اپلود کرده اید و جلوگیری از نفوذ هکر ها یک فایل httacces. دقیقا داخل فولدر هاست اتون که فایل جیسون و زیپ دارد بسازید و این کد قرار دهید و بجای عدد ۰ صفر = عدد IP  سرور هاستینگ اتون بذارید!

نگته: اگه عدد آیپی نمیدونید تیکت به هاستینگ بژنید

# محافظت از فایل‌های JSON و ZIP در برابر دسترسی مستقیم
<FilesMatch "\.(zip|json)$">
    <IfModule mod_authz_core.c>
        # اجازه دسترسی به درخواست‌های داخلی سرور (وردپرس) و افزونه‌های امنیتی
        <If "%{HTTP_USER_AGENT} =~ /WordPress|wordfence|aios/i">
            Require all granted
        </If>
        # اجازه دسترسی به IP سرور (برای درخواست‌های محلی)
        Require ip 127.0.0.1 ::1 00.00.0.00
        # جلوگیری از دسترسی مستقیم از مرورگر یا منابع غیرمجاز
        Require all denied
    </IfModule>
    <IfModule !mod_authz_core.c>
        # برای سرورهای قدیمی‌تر که mod_authz_core ندارند
        Order allow,deny
        Allow from 127.0.0.1
        Allow from ::1
        Allow from 00.00.0.00
        Deny from all
    </IfModule>
</FilesMatch>

# اطمینان از دسترسی وردپرس به فایل‌های JSON برای آپدیت
<Files "update.json">
    <IfModule mod_authz_core.c>
        # اجازه دسترسی به وردپرس و افزونه‌های امنیتی
        <If "%{HTTP_USER_AGENT} =~ /WordPress|wordfence|aios/i">
            Require all granted
        </If>
        Require ip 127.0.0.1 ::1 00.00.0.00
    </IfModule>
    <IfModule !mod_authz_core.c>
        Order allow,deny
        Allow from 127.0.0.1
        Allow from ::1
        Allow from 00.00.0.00
        Deny from all
    </IfModule>
</Files>

۳.۹/۵ - (۷ امتیاز)
Telegram
WhatsApp
Email
LinkedIn
پشتیبان سایت

3 پاسخ

دیدگاهتان را بنویسید

پنج − 3 =