web-dev-qa-db-fra.com

Désinstaller un plugin: supprimer toutes les options avec un préfixe spécifique

Objectif

En tant que développeur de plugins, je souhaite supprimer toutes les options commençant par le même préfixe.

Histoire

J'ai développé un plugin qui stocke des données dans les options. Lorsque l'utilisateur désinstalle le plug-in, le uninstall.php du plug-in exécute le code suivant:

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' );

Étant donné que toutes les options commencent par myplugin_, je souhaite implémenter un caractère générique. Logique, je suppose que cela ressemblerait à quelque chose comme ça:

if ( !defined( 'WP_UNINSTALL_PLUGIN' ) ) {
    exit;
}

delete_option( 'myplugin_*' );
4

J'ai trouvé une autre alternative en utilisant wp_load_alloptions() pour obtenir toutes les options disponibles, puis delete_option() pour chaque option ayant le préfixe myplugin_:

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

Remplacez "myplugin_" par votre préfixe:

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 );
}
5
Nate Allen