در این آموزش میلیون دلاری می آموزید که چگونه یک افزونه سفارشی (ووکامرس) را که در جایی میزبانی می کنید، مستقیماً از داشبورد وردپرس به روز کنید.

در این آموزش میلیون دلاری می آموزید که چگونه یک افزونه سفارشی (ووکامرس) را که در جایی میزبانی می کنید، مستقیماً از داشبورد وردپرس به روز کنید.

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

از زمانی که شروع به فروش افزونه‌های WooCommerce در اینجا در Axio کردم، باید راهی پیدا می‌کردم که به مشتریان اجازه می‌دادم به‌طور خودکار آنها را مستقیماً از سرپرست WP خود به‌روزرسانی کنند.

خوشبختانه، 2 قلاب وجود دارد که به کمک می آیند: pre_set_site_transient_update_plugins update_plugins_{$hostname} و plugins_api. با استفاده از این دو فیلتر، می توانید به وردپرس بگویید که فایل ZIP افزونه سفارشی شما در یک URL عمومی مشخص قابل دانلود است، به مشتری اعلان نشان می دهد که یک به روز رسانی افزونه در دسترس است، اجازه دهید با 1 کلیک به روز رسانی شود، و در صورت تمایل به آنها اجازه دهید خودکار را فعال کنند.

بنابراین، بیایید ببینیم چگونه کسب و کار افزونه خود را اجرا می کنم. لذت ببرید!

در این اسکرین شات داشبورد وردپرس، به وضوح می‌بینید که یک به‌روزرسانی برای افزونه «کد کوتاه ثبت ورود به سیستم بلومر ووکامرس» در دسترس است و می‌توانید «جزئیات نسخه را مشاهده کنید» یا «اکنون به‌روزرسانی کنید». نکته جادویی این است که – این افزونه ای است که توسط من میزبانی می شود و نه در مخزن وردپرس!

مرحله 1: افزونه سفارشی را ایجاد و میزبانی کنید

پس از تکمیل توسعه، فایل ZIP افزونه را در یک URL عمومی ذخیره کنید، به عنوان مثال:

www.axio.ir/file/whatever-plugin.zip

مرحله 2: یک فایل JSON Changelog ایجاد کنید

وقتی افزونه را خود میزبانی می‌کنید، باید به وردپرس (و همه وب‌سایت‌های وردپرسی که افزونه در آن نصب شده است) اطلاع دهیم که نسخه جدیدی در دسترس است، در غیر این صورت کدی که در مرحله 4 پیدا می‌کنید فعال نمی‌شود.

شما می توانید از چندین روش برای ذخیره داده های تغییرات استفاده کنید و ایجاد یک فایل JSON ساده ترین راه است. تنها چیزی که وردپرس نیاز دارد این است که نام فایل ZIP و نسخه افزونه را بازیابی کند تا بتواند آنها را به صورت پویا دریافت کند و اعلان به روز رسانی را راه اندازی کند.

یک ویرایشگر متن باز کنید و اطلاعات زیر را وارد کنید:

{
	"plugin_name": "Whatever Plugin For WooCommerce",
	"latest_version": "1.0.9",
	"download_url": "https://www.axio.ir/file/whatever-plugin.zip",
}

سپس، فایل را با پسوند JSON. ذخیره کنید و آن را در یک URL خاص از وب سایت خود قرار دهید.

www.axio.ir/file/plugin-updates.json

هر زمان که نسخه افزونه جدیدی را منتشر می کنید، این فایل را به روز نگه دارید. به محض آپلود نسخه 2.0.0 افزونه، فایل JSON را اصلا

{
	"plugin_name": "Whatever Plugin For WooCommerce",
	"latest_version": "2.0.0",
	"download_url": "https://www.axio.ir/file/whatever-plugin.zip",
}

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

به مسیر WordPress > Plugins > Add New > Upload بروید و افزونه سفارشی را نصب و فعال کنید. این افزونه با شماره نسخه ارائه می شود به عنوان مثال. 1.0.9 – اکنون باید راهی برای ادمین ها پیدا کنیم تا در صورت موجود بودن نسخه جدیدتر، افزونه را به روز کنند.

مرحله 4: قطعه PHP – افزونه سفارشی را از داشبورد وردپرس به روز کنید

این قسمت باحال است.

می توانید این را به کد افزونه اضافه کنید.

ما از دو فیلتر استفاده خواهیم کرد: update_plugins_{$hostname} و plugins_api. اولی مسئول به روز رسانی واقعی است. زمانی که روی «مشاهده جزئیات نسخه» کلیک می‌شود، دومی اطلاعات افزونه را نشان می‌دهد (عکس بالا را ببینید).

نکته 1: قسمت {$hostname} بر اساس جایی است که شما افزونه را میزبانی می کنید. فرض کنید URL افزونه https://www.axio.ir/file/whatever-plugin-1.0.9.zip است، سپس {$hostname} www.Axio.ir است.

نکته 2: همچنین باید نام پوشه افزونه و نام فایل افزونه را نیز بدانید که معمولاً یکسان هستند. اگر فایل ZIP whatever-plugin.zip باشد، انتظار دارم که پوشه پلاگین /whatever-plugin نامیده شود و فایل افزونه موجود در داخل /whatever-plugin.php نامیده شود.

نکته 3: فایل پلاگین باید از پارامترهای هدر “Plugin URI” و “Version” استفاده کند، زیرا ما آنها را از طریق کد بازیابی می کنیم.

<?php
/**
 * @snippet       Update Self-Hosted Plugin @ WordPress Dashboard
 * @how-to        Get CustomizeWoo.com FREE
 * @author        eJafari
 * @compatible    WooCommerce 7
 * @donate $9     https://axio.ir
 */
 
// ----------------
// 1: Plugin Description When People Click On View Version Details
// Note: use the plugin slug, path, name 
 
add_filter( 'plugins_api', 'axio_plugin_view_version_details', 9999, 3 );
 
function axio_plugin_view_version_details( $res, $action, $args ) {
   if ( 'plugin_information' !== $action ) return $res;
   if ( $args->slug !== 'whatever-plugin' ) return $res;
   $res = new stdClass();
   $res->name = 'Whatever Plugin For WooCommerce';
   $res->slug = 'whatever-plugin';
   $res->path = 'whatever-plugin/whatever-plugin.php';
   $res->sections = array(
      'description' => 'The plugin description',
   );
   $changelog = axio_whatever_plugin_request();
   $res->version = $changelog->latest_version;
   $res->download_link = $changelog->download_url;   
   return $res;
}
 
// ----------------
// 2: Plugin Update
// Note: use the plugin {$hostname}, slug & path 
 
add_filter( 'update_plugins_www.axio.ir', function( $update, array $plugin_data, string $plugin_file, $locales ) {
    if ( $plugin_file !== 'whatever-plugin/whatever-plugin.php' ) return $update;
    if ( ! empty( $update ) ) return $update;
    $changelog = axio_whatever_plugin_request();
    if ( ! version_compare( $plugin_data['Version'], $changelog->latest_version, '<' ) ) return $update;
    return [
        'slug' => 'whatever-plugin',
        'version' => $changelog->latest_version,
        'url' => $plugin_data['PluginURI'],
        'package' => $changelog->download_url,
    ];   
}, 9999, 4 );
 
// ----------------
// 3: Retrieve Plugin Changelog
// Note: use the public JSON file address
 
function axio_whatever_plugin_request() {
    $access = wp_remote_get( 'https://www.www.axio.ir/file/plugin-updates.json', array( 'timeout' => 10,   'headers' => array( 'Accept' => 'application/json' )   ) );
    if ( ! is_wp_error( $access ) && 200 === wp_remote_retrieve_response_code( $access ) ) {
         $result = json_decode( wp_remote_retrieve_body( $access ) );
         return $result;      
    }
}

خلاصه

برای اینکه به کاربر وردپرس اجازه دهید افزونه ای را که در جای دیگری میزبانی می کنید به روز کند، باید:

  1. برای توسعه افزونه مطابق مرحله 1 (نامگذاری) و مرحله 4 (الزامات به روز رسانی افزونه)
  2. برای ذخیره فایل ZIP در یک URL عمومی، به طوری که وردپرس بتواند آن را دانلود کند
  3. برای نگهداری یک فایل تغییرات JSON در یک URL عمومی، به طوری که وردپرس بداند آیا به روز رسانی در دسترس است یا خیر