Using WordPress ‘dbdelta_create_queries’ PHP filter

The dbdelta_create_queries WordPress PHP filter allows you to modify the SQL queries for creating tables and/or databases using the dbDelta function.

Usage

add_filter('dbdelta_create_queries', 'your_custom_function_name');
function your_custom_function_name($cqueries) {
    // your custom code here
    return $cqueries;
}

Parameters

  • $cqueries (string[]): An array of dbDelta create SQL queries.

More information

See WordPress Developer Resources: dbdelta_create_queries

Examples

Adding a prefix to table names

To add a custom prefix to all table names in the queries:

add_filter('dbdelta_create_queries', 'add_custom_table_prefix');
function add_custom_table_prefix($cqueries) {
    $prefix = 'custom_';
    foreach ($cqueries as &$query) {
        $query = preg_replace('/CREATE TABLE `?(\w+)/', 'CREATE TABLE `' . $prefix . '$1', $query);
    }
    return $cqueries;
}

Converting table storage engine to InnoDB

To change the storage engine for all tables to InnoDB:

add_filter('dbdelta_create_queries', 'convert_to_innodb');
function convert_to_innodb($cqueries) {
    foreach ($cqueries as &$query) {
        $query = str_ireplace('ENGINE=MyISAM', 'ENGINE=InnoDB', $query);
    }
    return $cqueries;
}

Adding a column to a specific table

To add a new column to a specific table in the queries:

add_filter('dbdelta_create_queries', 'add_column_to_table');
function add_column_to_table($cqueries) {
    $table_name = 'your_table_name';
    $column = "new_column_name INT(11) NOT NULL";
    foreach ($cqueries as &$query) {
        if (strpos($query, $table_name) !== false) {
            $query = str_replace(') ENGINE', ", $column) ENGINE", $query);
        }
    }
    return $cqueries;
}

Remove a specific table

To remove a specific table from the queries:

add_filter('dbdelta_create_queries', 'remove_specific_table');
function remove_specific_table($cqueries) {
    $table_name = 'your_table_name';
    foreach ($cqueries as $key => $query) {
        if (strpos($query, $table_name) !== false) {
            unset($cqueries[$key]);
        }
    }
    return $cqueries;
}

Replacing table charset

To replace the charset for all tables in the queries:

add_filter('dbdelta_create_queries', 'replace_table_charset');
function replace_table_charset($cqueries) {
    $new_charset = 'utf8mb4';
    foreach ($cqueries as &$query) {
        $query = preg_replace('/CHARSET=\w+/', 'CHARSET=' . $new_charset, $query);
    }
    return $cqueries;
}