'eppro_popup', 'post_status' => 'any', 'posts_per_page' => -1, 'fields' => 'ids', ] ); foreach ( (array) $eppro_popup_ids as $eppro_pid ) { wp_delete_post( (int) $eppro_pid, true ); } // ── Delete all eppro_hf_template posts and their meta ─────────────────────────── $eppro_hf_ids = get_posts( [ 'post_type' => 'eppro_hf_template', 'post_status' => 'any', 'posts_per_page' => -1, 'fields' => 'ids', ] ); foreach ( (array) $eppro_hf_ids as $eppro_hf_pid ) { wp_delete_post( (int) $eppro_hf_pid, true ); } // ── Clean up orphaned Developer Tools post meta ────────────────────────────── delete_post_meta_by_key( '_eppro_custom_css' ); delete_post_meta_by_key( '_eppro_custom_js' ); // ── Remove all plugin options ───────────────────────────────────────────────── delete_option( 'eppro_settings' ); delete_option( 'eppro_settings_version' ); delete_option( 'eppro_setup_complete' ); delete_option( 'eppro_popup_cpt_flushed' ); delete_option( 'eppro_popup_cpt_flushed_v2' ); delete_option( 'eppro_hf_cpt_flushed' ); // Feedback manager options (correct option names from EPPRO_Feedback_Manager constants) delete_option( 'eppro_feedback_notice_dismissed' ); delete_option( 'eppro_show_feedback_notice' ); delete_option( 'eppro_deactivation_feedback_log' ); delete_option( 'eppro_prefix_migrated' ); // ── Form attachments (uploads/eppro-forms) — their entries table is gone too ── $eppro_uploads = wp_get_upload_dir(); $eppro_forms_dir = trailingslashit( $eppro_uploads['basedir'] ) . 'eppro-forms'; if ( is_dir( $eppro_forms_dir ) ) { require_once ABSPATH . 'wp-admin/includes/file.php'; if ( WP_Filesystem() ) { global $wp_filesystem; $wp_filesystem->rmdir( $eppro_forms_dir, true ); } } // Flush rewrite rules so CPT slugs are removed from .htaccess/wp rules immediately. flush_rewrite_rules();