卸载插件:删除所有带有特定前缀的选项

时间:2016-08-20 作者:Ethan O\'Sullivan

目标作为所有插件开发人员,我想删除所有以相同前缀开头的选项。

我开发了一个插件,可以在选项中存储数据。当用户卸载插件时uninstall.php 插件中执行以下代码:

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\' );
因为所有选项都以myplugin_, 我想实现一个通配符。Logicall,我假设它看起来像这样:

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

delete_option( \'myplugin_*\' );

2 个回复
最合适的回答,由SO网友:Ethan O\'Sullivan 整理而成

通过使用wp_load_alloptions() 函数获取所有可用选项,然后delete_option() 对于每个具有myplugin_ 前缀:

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

SO网友:Nate Allen

将“myplugin\\”替换为前缀:

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