زمانی که افزونه ووکامرس فعال می شود چه اتفاقاتی میفتد؟
تاریخ:
03 شهریور 1399
همانطور که می دانیم، برای اعمال دستورات و عملکردهای خاص در هنگام فعال کردن افزونه در وردپرس، از تابع register_activation_hook استفاده می شود.
در ووکامرس، این تابع به واسطه متد construct کلاس اصلی (class-woocommerce.php) موجود در فولدر includes و درون تابع init_hooks تعریف می شود.
// includes/class-woocommerce.php public function __construct() { $this->init_hooks(); } private function init_hooks() { register_activation_hook( WC_PLUGIN_FILE, array( 'WC_Install', 'install' ) ); }
چنانچه مشخص است، وردپرس یک کلاس مستقل با نام WC_Install برای مدیریت فعالسازی افزونه ایجاد کرده است. این کلاس در فایل class-wc-install.php در فولدر includes وجود دارد.
بررسی تابع install در کلاس WC_Install
چنانچه گفتیم این تابع در هنگام نصب ووکامرس اجرا می شود.
/** * Install WC. */ public static function install() { if ( ! is_blog_installed() ) { return; } // Check if we are not already running this routine. if ( 'yes' === get_transient( 'wc_installing' ) ) { return; } // If we made it till here nothing is running yet, lets set the transient now. set_transient( 'wc_installing', 'yes', MINUTE_IN_SECONDS * 10 ); wc_maybe_define_constant( 'WC_INSTALLING', true ); WC()->wpdb_table_fix(); self::remove_admin_notices(); self::create_tables(); self::verify_base_tables(); self::create_options(); self::create_roles(); self::setup_environment(); self::create_terms(); self::create_cron_jobs(); self::create_files(); self::maybe_enable_setup_wizard(); self::update_wc_version(); self::maybe_update_db_version(); self::maybe_enable_homescreen(); delete_transient( 'wc_installing' ); do_action( 'woocommerce_flush_rewrite_rules' ); do_action( 'woocommerce_installed' ); }
در بخش اول این تابع، نصب بودن صحیح وردپرس با استفاده از تابع is_blog_installed چک می شود تا اگر تمام نیازهای اجرای وردپرس موجود نبود، اجرای تابع متوقف شود.
if ( ! is_blog_installed() ) { return; }