token(); if ( null !== $token ) { try { $connection->client()->disconnect( $token ); } catch ( \Throwable $e ) { // phpcs:ignore Generic.CodeAnalysis.EmptyStatement.DetectedCatch -- best effort, a hiba szándékosan elnyelve. // Best effort: a Mowl oldalon kézzel is leválasztható. } } foreach ( \Mowl\WP\Support\Options::ALL as $option ) { delete_option( $option ); } global $wpdb; // phpcs:disable WordPress.DB.DirectDatabaseQuery -- az uninstall.php-nek nincs WP API-ja a mowl_* transientek tömeges törlésére. $wpdb->query( "DELETE FROM {$wpdb->options} WHERE option_name LIKE '\_transient\_mowl\_%' OR option_name LIKE '\_transient\_timeout\_mowl\_%'" ); // A B3 fejlesztői / béta-változatainak (már nem használt) készlet-állapot metája. $wpdb->query( "DELETE FROM {$wpdb->postmeta} WHERE meta_key = '_mowl_bis_last_status'" ); // phpcs:enable \Mowl\WP\Support\EventQueue::drop(); \Mowl\WP\Support\CartStore::drop(); // A WooCommerce-modul Action Scheduler-akciói (Dispatcher::GROUP = 'mowl': // a `mowl_dispatch_events` async/retry és a napi `mowl_prune_events`). Az // AS táblái oldalanként vannak, ezért itt, a switch_to_blog() alatt fut. // Az AS a WooCommerce-szel jön; ha az már nincs, nincs mit leszedni. if ( function_exists( 'as_unschedule_all_actions' ) ) { as_unschedule_all_actions( '', array(), 'mowl' ); } } if ( is_multisite() ) { $mowl_site_ids = get_sites( array( 'fields' => 'ids', 'number' => 0, ) ); foreach ( $mowl_site_ids as $mowl_site_id ) { switch_to_blog( (int) $mowl_site_id ); mowl_uninstall_site(); restore_current_blog(); } } else { mowl_uninstall_site(); } global $wpdb; // A usermeta hálózati szintű tábla: egyszer törlünk, nem oldalanként. // phpcs:disable WordPress.DB.DirectDatabaseQuery -- az uninstall.php-nek nincs WP API-ja a mowl_* usermeták tömeges törlésére. $wpdb->query( "DELETE FROM {$wpdb->usermeta} WHERE meta_key LIKE 'mowl\_%'" ); // phpcs:enable // A közvetlen SQL nem törli az objektum-gyorsítótárban esetleg már szereplő // bejegyzéseket (pl. ha ugyanabban a kérésben korábban olvastuk őket) — // ürítjük, hogy a get_option()/get_transient() ne adjon vissza elavult adatot. wp_cache_flush();