'aafe_item', 'posts_per_page' => -1, 'post_status' => 'any', 'fields' => 'ids', ) ); foreach ( $aafe_posts as $post_id ) { wp_delete_post( $post_id, true ); } // Remove 'aafe_item' from Elementor's supported CPT list. // After uninstall, Elementor's own settings should no longer reference this CPT. $aafe_cpt_support = get_option( 'elementor_cpt_support', array() ); if ( is_array( $aafe_cpt_support ) ) { $aafe_cpt_support = array_diff( $aafe_cpt_support, array( 'aafe_item' ) ); update_option( 'elementor_cpt_support', $aafe_cpt_support ); } // Clean up Mega Menu nav-menu-item postmeta added by class-mega-menu.php. // Meta keys used: _aafe_mega_menu_template, _aafe_mega_menu_width, // _aafe_mega_menu_custom_width, _aafe_mega_menu_align, _aafe_mega_menu_offset. global $wpdb; foreach ( array( '_aafe_mega_menu_', '_aafe_badge_' ) as $aafe_meta_prefix ) { $wpdb->query( // phpcs:ignore WordPress.DB.DirectDatabaseQuery.DirectQuery, WordPress.DB.DirectDatabaseQuery.NoCaching $wpdb->prepare( "DELETE FROM {$wpdb->postmeta} WHERE meta_key LIKE %s", $wpdb->esc_like( $aafe_meta_prefix ) . '%' ) ); } // Remove cached data (widget metadata per version + usage scan results). delete_transient( 'aafe_widget_usage_stats' ); $wpdb->query( // phpcs:ignore WordPress.DB.DirectDatabaseQuery.DirectQuery, WordPress.DB.DirectDatabaseQuery.NoCaching $wpdb->prepare( "DELETE FROM {$wpdb->options} WHERE option_name LIKE %s OR option_name LIKE %s", $wpdb->esc_like( '_transient_aafe_widget_metadata_v' ) . '%', $wpdb->esc_like( '_transient_timeout_aafe_widget_metadata_v' ) . '%' ) );