There are different approaches to this, depending on specific requirements.
For example in your case you seem more worried about plugin picking up ghost data than that data being left behind. Such case might be easier handled by generating unique key prefix to use and just flushing that on uninstall. No prefix = no data access.
I would say the general case is to ignore the issue and to use appropriate timeout values for transients. If data is only relevant for specific amount of time then using appropriate timeout handles it implicitly just fine.
Options can (should) be stored as single set, so clearing those out is easy and fast.
Related Posts:
- Maximum lifetime for nonce
- Objective Best Practices for Plugin Development? [closed]
- How do i best handle custom plugin page actions?
- How to create an API for my plugin?
- Is it ever okay to include inline CSS in plugins?
- Plugins in symlinked directories?
- In Which Contexts are Plugins Responsible for Data Validation/Sanitization?
- Plugin Form Submission Best Practice
- Best way to abort plugin in case of insufficient PHP version?
- How can I configure Docker for developing and deploying a custom theme?
- What do you think about custom designed plugin/theme options UIs?
- No Error Log File, no debug info
- Is get_option() faster than accessing get_transient()?
- Where to put third party PHP library?
- Is the new WordPress 3.1 admin bar pluggable and how can I extend it?
- How to use PanelColorSettings in custom Gutenberg block?
- register_uninstall_hook() vs uninstall.php – which one is better way to handle plugin uninstallation script?
- Getting a peer review for my new plugin?
- Best practices for using the transients API
- Optimize shortcode callbacks
- Trouble with Transient API when W3TC is activated [closed]
- How to integrate a PHP webmail script into the backend of WordPress?
- Using filters and actions for plugin API?
- Is There A Hook To Process The Content Of The Text Widget?
- How to Change the Entire WordPress Admin panel Look and Feel?
- How to make dynamically-generated content searchable in WordPress?
- How to log plugin errors to plugin error_log file
- Which to use to execute code during the saving of a plugin settings page?
- Allowing for multiple template views on the Gallery Settings page when using the Visual Editor
- Using Primary Color in Plugin Block
- When is it appropriate to put functions on page template vs. functions.php?
- Custom theme sufficient or custom plugin neccessary for this feature set?
- How does uninstalling WordPress plugins work?
- When to check if a function exists
- How to create custom home page via plugin?
- Deletion of shared options using uninstall.php
- Adding callback function for wp_ajax_ has no effect
- Sessions not creating correctly in custom function
- Featured Image not showing in admin
- How to use wp_set_password in a plugin?
- How Can I setup WP CLI on Windows development machine running AMPPS?
- WP_LOCALIZE_SCRIPT doesn’t work
- How can I free up the memory used by update_post_meta?
- Nuance in adding CPT and TAX to a submenu
- Example of uninstaller routine to remove all custom theme options from wp_options
- Can I differentiate between “Delete Post Permanently” and “Empty Trash” and do something for each accordingly?
- Delete a specific item menu when I deactivate my plugin
- How can I render shortcode so that its not cached by Caching plugins?
- Are we allowed to use the Allman (BSD) indent style when coding WordPress plugins and themes?
- Plugin Uninstall and Deactivate via Options Menu
- Get the password key when using the wp_new_user_notification_email filter
- Does WordPress’s HTTP API use any caching?
- Will cron job run if page loaded is being served from cache?
- Order properties should not be accessed directly
- Is using WP Transients to save external data for a plugin the best/right way?
- Cache directory needed for plugin
- How to deal with equal & similar arguments for a function?
- Executing a function upon webhook calling wordpress
- Clearing cached plugin data if it is using an external object cache
- Customizer: widget-synced triggers twice
- WordPress not working on localhost
- Adding functions to hooks from within a class
- how to use hook deleted_user into custom function to delete user from custom table
- Disable The Events Calendar plugin from loading its scripts
- Where to store the name of a custom table?
- Applying OO patterns and principles to plugin development
- WordPress is automatically linking plain text email addresses
- Is Using WordPress Supplied WYSIWYG Advisable?
- ServerSideRender and Media Object: attributes passing image data object to php renderer even though it’s not set
- Make WordPress cache permanent for some pages until edited
- Is it possible to change a term slug before being saved to the database?
- Will setcookie work if there is a cache plugin installed?
- How to use a hook to override an update_post_meta call in a plugin?
- Add code inside specific wordpress standard function
- Custom Taxonomy to dropdown box on adminside wordpress
- Create a free scripts and styles template within a plugin
- How to implement filesystem cache in WordPress
- How to modify the comments to be displayed in a post?
- How can I turn a custom wordpress page into a product page?
- How can we display product price $104 on the cart while the credit card payment method is checked?
- Incorporate small angular feature in my wordpress site
- How to Bind one post object Type with other postobject Type in Advanced Custom field [closed]
- Is using custom table to suit business needs instead of transients a big hit to page load speed?
- Caching the_content calls
- Search: how to extend the existing search to include a custom table
- Plugin development: delete options when updating to a new version
- Is there documentation reference for forms in menu and setting pages?
- How to remove plugin-specific custom taxonomy terms when plugin is uninstalled?
- Enqueue script globally
- How to modify files inside wp-includes directory in wordpress
- How should I go about registering JavaScript that isn’t a file? [duplicate]
- Custom entity search and display
- How to set a cookie for logged in users to md5($user->ID . “my_secret”)?
- Plugin: database creation
- Loading Modernizr (or other JavaScript libraries) for use in a plugin
- Show message from backend
- Why in this archive page that call query_posts() function show only the last 10 posts?
- Create Widget or Enable Shortcodes in Sidebar
- Logout after clicking URL link results in “headers already sent” error
- Service Worker Uncaught (in promise) DOMException