91 lines
2.4 KiB
PHP
91 lines
2.4 KiB
PHP
<?php
|
|
/**
|
|
* PC Changelog Manager - Uninstall Cleanup
|
|
*
|
|
* Cleans up all plugin data when plugin is deleted.
|
|
*
|
|
* @package PCChangelogManager
|
|
*/
|
|
|
|
// Prevent direct access to file.
|
|
if ( ! defined( 'WP_UNINSTALL_PLUGIN' ) ) {
|
|
exit;
|
|
}
|
|
|
|
// Check if this is the correct plugin being uninstalled.
|
|
if ( false === strpos( WP_UNINSTALL_PLUGIN, 'pc-changelog-manager-abc123' ) ) {
|
|
exit;
|
|
}
|
|
|
|
// Use direct SQL queries for reliable cleanup during uninstall.
|
|
global $wpdb;
|
|
|
|
// Add error logging for debugging.
|
|
function pc_clm_log_error( $message ) {
|
|
if ( defined( 'WP_DEBUG' ) && WP_DEBUG ) {
|
|
error_log( 'PC Changelog Uninstall Error: ' . $message );
|
|
}
|
|
}
|
|
|
|
// Delete post meta for pc_changelog posts.
|
|
try {
|
|
$wpdb->query(
|
|
"DELETE FROM {$wpdb->postmeta} WHERE post_id IN (SELECT ID FROM {$wpdb->posts} WHERE post_type = 'pc_changelog')"
|
|
);
|
|
} catch ( Exception $e ) {
|
|
pc_clm_log_error( 'Failed to delete post meta: ' . $e->getMessage() );
|
|
// Continue with cleanup despite error
|
|
}
|
|
|
|
// Delete pc_changelog posts.
|
|
try {
|
|
$wpdb->query(
|
|
"DELETE FROM {$wpdb->posts} WHERE post_type = 'pc_changelog'"
|
|
);
|
|
} catch ( Exception $e ) {
|
|
pc_clm_log_error( 'Failed to delete posts: ' . $e->getMessage() );
|
|
// Continue with cleanup despite error
|
|
}
|
|
|
|
// Delete upvote transients (use wildcard for better cleanup).
|
|
try {
|
|
$wpdb->query(
|
|
"DELETE FROM {$wpdb->options} WHERE option_name LIKE 'transient_timeout_pc_clm_%' OR option_name LIKE '_transient_timeout_pc_clm_%'"
|
|
);
|
|
} catch ( Exception $e ) {
|
|
pc_clm_log_error( 'Failed to delete transients: ' . $e->getMessage() );
|
|
// Continue with cleanup despite error
|
|
}
|
|
|
|
// Delete vote tracking transients.
|
|
try {
|
|
$wpdb->query(
|
|
"DELETE FROM {$wpdb->options} WHERE option_name LIKE 'pc_clm_voted_%'"
|
|
);
|
|
} catch ( Exception $e ) {
|
|
pc_clm_log_error( 'Failed to delete vote tracking: ' . $e->getMessage() );
|
|
// Continue with cleanup despite error
|
|
}
|
|
|
|
// Delete all transients with our prefix.
|
|
try {
|
|
$wpdb->query(
|
|
"DELETE FROM {$wpdb->options} WHERE option_name LIKE 'pc_clm_%'"
|
|
);
|
|
} catch ( Exception $e ) {
|
|
pc_clm_log_error( 'Failed to delete all transients: ' . $e->getMessage() );
|
|
// Continue with cleanup despite error
|
|
}
|
|
|
|
// Delete our plugin options.
|
|
try {
|
|
delete_option( 'pc_clm_rewrite_rules_flushed' );
|
|
} catch ( Exception $e ) {
|
|
pc_clm_log_error( 'Failed to delete plugin options: ' . $e->getMessage() );
|
|
// Continue with cleanup despite error
|
|
}
|
|
|
|
// Clear any remaining plugin cache.
|
|
if ( function_exists( 'wp_cache_flush' ) ) {
|
|
wp_cache_flush();
|
|
} |