Using WordPress ‘pre_get_table_charset’ PHP filter

pre_get_table_charset is a WordPress PHP filter that allows you to modify the table charset value before the database is checked.

Usage

add_filter('pre_get_table_charset', 'your_custom_function', 10, 2);

function your_custom_function($charset, $table) {
    // your custom code here
    return $charset;
}

Parameters

  • $charset (string|WP_Error|null) – The character set to use, or a WP_Error object if it couldn’t be found. Default is null.
  • $table (string) – The name of the table being checked.

More information

See WordPress Developer Resources: https://developer.wordpress.org/reference/hooks/pre_get_table_charset/

Examples

Set a default charset for a specific table

Set the default charset to ‘utf8mb4’ for the ‘wp_custom_table’ table.

add_filter('pre_get_table_charset', 'set_custom_table_charset', 10, 2);

function set_custom_table_charset($charset, $table) {
    if ('wp_custom_table' === $table) {
        $charset = 'utf8mb4';
    }
    return $charset;
}

Set a custom charset for all tables

Set the custom charset ‘custom_charset’ for all tables.

add_filter('pre_get_table_charset', 'set_all_tables_charset', 10, 2);

function set_all_tables_charset($charset, $table) {
    $charset = 'custom_charset';
    return $charset;
}

Display an error if charset is not found

Return a WP_Error object if the charset is not found.

add_filter('pre_get_table_charset', 'handle_missing_charset', 10, 2);

function handle_missing_charset($charset, $table) {
    if (null === $charset) {
        $charset = new WP_Error('charset_not_found', __('Charset not found.'));
    }
    return $charset;
}

Set different charsets for different tables

Set custom charsets for specific tables based on table names.

add_filter('pre_get_table_charset', 'set_table_specific_charset', 10, 2);

function set_table_specific_charset($charset, $table) {
    switch ($table) {
        case 'wp_table1':
            $charset = 'utf8';
            break;
        case 'wp_table2':
            $charset = 'utf8mb4';
            break;
        default:
            break;
    }
    return $charset;
}

Set the charset based on a condition

Set the charset to ‘utf8’ if a specific condition is met.

add_filter('pre_get_table_charset', 'set_charset_based_on_condition', 10, 2);
function set_charset_based_on_condition($charset, $table) {
$condition = true; // Replace with your actual condition
if ($condition) {
$charset = 'utf8';
}
return $charset;
}