WordPress 删除选项();通配符功能?

问题描述 投票:0回答:3

如何删除 WordPress 数据库中以特定前缀开头的所有选项名称?

我假设我们需要指定一个前缀,获取以该前缀开头的所有选项,然后删除找到的每个选项。

这里是用于获取和删除数据库中选项的前缀和 WP 函数的示例。

<?php
$prefix = 'cpt_';
$getOpt = get_option($prefix);
foreach($getOpt as $toDelete){
    $deleteOpt = delete_option($prefix);
    if(!$deleteOpt){
        echo 'Failure.';
    }
    if($deleteOpt){
        echo 'Success.';
    }
}
?>

资源:

php wordpress wildcard prefix
3个回答
9
投票

您可以运行此查询:

global $wpdb;
$wpdb->query( "DELETE FROM {$wpdb->options} WHERE option_name LIKE 'cpt_%'" );

或者将其放入像这样的函数中:

function delete_options_prefixed( $prefix ) {
    global $wpdb;
    $wpdb->query( "DELETE FROM {$wpdb->options} WHERE option_name LIKE '{$prefix}%'" );
}
delete_options_prefixed( 'cpt_' );

2
投票

您需要为插件设置的所有变量创建一个“白名单”(我假设您正在查看插件卸载脚本),然后在另一端循环遍历它,以便可以将它们全部删除。

就像这样简单:

// Somewhere in your plugin, maybe as a class property
$pluginDefinedOptions = array('my_name', 'my_created', 'my_modified'); // etc

// Clear up our settings
foreach($pluginDefinedOptions as $optionName) {
    delete_option($optionName);
}

这是保持插件代码整洁的唯一方法。


0
投票

将“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 );
}
© www.soinside.com 2019 - 2024. All rights reserved.