booted ) { return; } $this->booted = true; // Frissítés 1.0-ról: az aktiválási hook egy meglévő telepítésen nem fut // le újra, ezért az install() a verzió-ellenőrzésével (egy olcsó // get_option()) minden kérésen biztonságosan lefuttatható. add_action( 'plugins_loaded', array( Support\EventQueue::class, 'install' ), 5 ); add_action( 'plugins_loaded', array( Support\CartStore::class, 'install' ), 5 ); $this->connection = new Api\Connection(); ( new Privacy( $this->connection ) )->register(); ( new Rest\Routes( $this->connection ) )->register(); $renderer = new Forms\Renderer( $this->connection ); ( new Forms\Shortcode( $renderer ) )->register(); ( new Forms\Block( $renderer ) )->register(); if ( is_admin() ) { ( new Admin\ConnectController( $this->connection ) )->register(); $this->settings_page = new Admin\SettingsPage( $this->connection ); $this->settings_page->register(); ( new Admin\Notices( $this->connection ) )->register(); } // A WordPress a bővítményeket tárolt sorrendben tölti be, nem // ábécé szerint — a `mowl/mowl.php` megelőzheti a // `woocommerce/woocommerce.php`-t, ezért a WooCommerce-osztály itt, // boot() idejében még nem biztos, hogy létezik. A `plugins_loaded`-re // halasztott ellenőrzés minden bővítmény betöltése UTÁN fut, itt már // megbízható; a WooCommerce a saját `before_woocommerce_init` // hookját csak később, `init`-en dobja, így a HPOS-deklaráció (lásd // Module::register()) még időben becsatlakozik. add_action( 'plugins_loaded', function (): void { if ( self::has_woocommerce() ) { ( new WooCommerce\Module( $this->connection ) )->register(); } }, 10 ); } public function settings_page(): ?Admin\SettingsPage { return $this->settings_page; } /** Csak akkor igaz, ha a WooCommerce aktív — a 2. fázis erre épít. */ public static function has_woocommerce(): bool { return class_exists( 'WooCommerce' ); } /** * Kikapcsoláskor (register_deactivation_hook): az Action Scheduler * `mowl` csoportjának minden ismétlődő és függő action-je lekerül — * különben a sweep/prune/reconcile/dispatch a bővítmény nélkül is * futna tovább, callback híján "failed"-re. A három ütemezés-ellenőrző * transiens is törlődik, hogy újra-aktiváláskor az ismétlődő action-ök * már az első init-en újra létrejöjjenek (a transiens különben akár egy * napig "megvan"-t mondana). Az adat (táblák, opciók, token) marad — * az az uninstall.php dolga. */ public static function deactivate(): void { if ( function_exists( 'as_unschedule_all_actions' ) ) { as_unschedule_all_actions( '', array(), WooCommerce\Dispatcher::GROUP ); } delete_transient( WooCommerce\Dispatcher::PRUNE_CHECK_TRANSIENT ); delete_transient( WooCommerce\Dispatcher::REFRESH_HEALTH_CHECK_TRANSIENT ); delete_transient( WooCommerce\Cart\CartSweeper::SCHEDULE_CHECK_TRANSIENT ); delete_transient( WooCommerce\Sync\Reconciler::SCHEDULE_CHECK_TRANSIENT ); } }