Desinstalando um plugin: exclua todas as opções com prefixo específico

Objetivo

Como todo o desenvolvedor de plugins, eu quero excluir todas as opções que começam com o mesmo prefixo.

Backstory

Desenvolvi um plugin que armazena dados nas opções. Quando o usuário desinstala o plugin, a uninstall.php no plugin executa o seguinte código:

 if ( !defined( 'WP_UNINSTALL_PLUGIN' ) ) { exit; } delete_option( 'myplugin_some_opt_1' ); delete_option( 'myplugin_some_opt_2' ); delete_option( 'myplugin_some_opt_3' ); delete_option( 'myplugin_some_opt_4' ); 

Como todas as opções começam com myplugin_ , eu quero implementar um curinga. Logicall, eu suponho que ele seria algo assim:

 if ( !defined( 'WP_UNINSTALL_PLUGIN' ) ) { exit; } delete_option( 'myplugin_*' ); 

Solutions Collecting From Web of "Desinstalando um plugin: exclua todas as opções com prefixo específico"

Substitua “myplugin_” por seu prefixo:

 global $wpdb; $plugin_options = $wpdb->get_results( "SELECT option_name FROM $wpdb->options WHERE option_name LIKE 'myplugin_%'" ); foreach( $plugin_options as $option ) { delete_option( $option->option_name ); } 

Eu descobri outra alternativa usando a function wp_load_alloptions() para obter todas as opções disponíveis e, em seguida, delete_option() para cada opção que tenha o prefixo myplugin_ :

 foreach ( wp_load_alloptions() as $option => $value ) { if ( strpos( $option, 'myplugin_' ) === 0 ) { delete_option( $option ); } }