delete_expired_transients

The timeline below displays how wordpress function delete_expired_transients has changed across different WordPress versions. If a version is not listed, refer to the next available version below.

WordPress Version: 6.2

/**
 * Deletes all expired transients.
 *
 * Note that this function won't do anything if an external object cache is in use.
 *
 * The multi-table delete syntax is used to delete the transient record
 * from table a, and the corresponding transient_timeout record from table b.
 *
 * @global wpdb $wpdb WordPress database abstraction object.
 *
 * @since 4.9.0
 *
 * @param bool $force_db Optional. Force cleanup to run against the database even when an external object cache is used.
 */
function delete_expired_transients($force_db = false)
{
    global $wpdb;
    if (!$force_db && wp_using_ext_object_cache()) {
        return;
    }
    $wpdb->query($wpdb->prepare("DELETE a, b FROM {$wpdb->options} a, {$wpdb->options} b\n\t\t\tWHERE a.option_name LIKE %s\n\t\t\tAND a.option_name NOT LIKE %s\n\t\t\tAND b.option_name = CONCAT( '_transient_timeout_', SUBSTRING( a.option_name, 12 ) )\n\t\t\tAND b.option_value < %d", $wpdb->esc_like('_transient_') . '%', $wpdb->esc_like('_transient_timeout_') . '%', time()));
    if (!is_multisite()) {
        // Single site stores site transients in the options table.
        $wpdb->query($wpdb->prepare("DELETE a, b FROM {$wpdb->options} a, {$wpdb->options} b\n\t\t\t\tWHERE a.option_name LIKE %s\n\t\t\t\tAND a.option_name NOT LIKE %s\n\t\t\t\tAND b.option_name = CONCAT( '_site_transient_timeout_', SUBSTRING( a.option_name, 17 ) )\n\t\t\t\tAND b.option_value < %d", $wpdb->esc_like('_site_transient_') . '%', $wpdb->esc_like('_site_transient_timeout_') . '%', time()));
    } elseif (is_multisite() && is_main_site() && is_main_network()) {
        // Multisite stores site transients in the sitemeta table.
        $wpdb->query($wpdb->prepare("DELETE a, b FROM {$wpdb->sitemeta} a, {$wpdb->sitemeta} b\n\t\t\t\tWHERE a.meta_key LIKE %s\n\t\t\t\tAND a.meta_key NOT LIKE %s\n\t\t\t\tAND b.meta_key = CONCAT( '_site_transient_timeout_', SUBSTRING( a.meta_key, 17 ) )\n\t\t\t\tAND b.meta_value < %d", $wpdb->esc_like('_site_transient_') . '%', $wpdb->esc_like('_site_transient_timeout_') . '%', time()));
    }
}

WordPress Version: 6.1

/**
 * Deletes all expired transients.
 *
 * Note that this function won't do anything if an external object cache is in use.
 *
 * The multi-table delete syntax is used to delete the transient record
 * from table a, and the corresponding transient_timeout record from table b.
 *
 * @since 4.9.0
 *
 * @param bool $force_db Optional. Force cleanup to run against the database even when an external object cache is used.
 */
function delete_expired_transients($force_db = false)
{
    global $wpdb;
    if (!$force_db && wp_using_ext_object_cache()) {
        return;
    }
    $wpdb->query($wpdb->prepare("DELETE a, b FROM {$wpdb->options} a, {$wpdb->options} b\n\t\t\tWHERE a.option_name LIKE %s\n\t\t\tAND a.option_name NOT LIKE %s\n\t\t\tAND b.option_name = CONCAT( '_transient_timeout_', SUBSTRING( a.option_name, 12 ) )\n\t\t\tAND b.option_value < %d", $wpdb->esc_like('_transient_') . '%', $wpdb->esc_like('_transient_timeout_') . '%', time()));
    if (!is_multisite()) {
        // Single site stores site transients in the options table.
        $wpdb->query($wpdb->prepare("DELETE a, b FROM {$wpdb->options} a, {$wpdb->options} b\n\t\t\t\tWHERE a.option_name LIKE %s\n\t\t\t\tAND a.option_name NOT LIKE %s\n\t\t\t\tAND b.option_name = CONCAT( '_site_transient_timeout_', SUBSTRING( a.option_name, 17 ) )\n\t\t\t\tAND b.option_value < %d", $wpdb->esc_like('_site_transient_') . '%', $wpdb->esc_like('_site_transient_timeout_') . '%', time()));
    } elseif (is_multisite() && is_main_site() && is_main_network()) {
        // Multisite stores site transients in the sitemeta table.
        $wpdb->query($wpdb->prepare("DELETE a, b FROM {$wpdb->sitemeta} a, {$wpdb->sitemeta} b\n\t\t\t\tWHERE a.meta_key LIKE %s\n\t\t\t\tAND a.meta_key NOT LIKE %s\n\t\t\t\tAND b.meta_key = CONCAT( '_site_transient_timeout_', SUBSTRING( a.meta_key, 17 ) )\n\t\t\t\tAND b.meta_value < %d", $wpdb->esc_like('_site_transient_') . '%', $wpdb->esc_like('_site_transient_timeout_') . '%', time()));
    }
}

WordPress Version: 5.4

/**
 * Deletes all expired transients.
 *
 * The multi-table delete syntax is used to delete the transient record
 * from table a, and the corresponding transient_timeout record from table b.
 *
 * @since 4.9.0
 *
 * @param bool $force_db Optional. Force cleanup to run against the database even when an external object cache is used.
 */
function delete_expired_transients($force_db = false)
{
    global $wpdb;
    if (!$force_db && wp_using_ext_object_cache()) {
        return;
    }
    $wpdb->query($wpdb->prepare("DELETE a, b FROM {$wpdb->options} a, {$wpdb->options} b\n\t\t\tWHERE a.option_name LIKE %s\n\t\t\tAND a.option_name NOT LIKE %s\n\t\t\tAND b.option_name = CONCAT( '_transient_timeout_', SUBSTRING( a.option_name, 12 ) )\n\t\t\tAND b.option_value < %d", $wpdb->esc_like('_transient_') . '%', $wpdb->esc_like('_transient_timeout_') . '%', time()));
    if (!is_multisite()) {
        // Single site stores site transients in the options table.
        $wpdb->query($wpdb->prepare("DELETE a, b FROM {$wpdb->options} a, {$wpdb->options} b\n\t\t\t\tWHERE a.option_name LIKE %s\n\t\t\t\tAND a.option_name NOT LIKE %s\n\t\t\t\tAND b.option_name = CONCAT( '_site_transient_timeout_', SUBSTRING( a.option_name, 17 ) )\n\t\t\t\tAND b.option_value < %d", $wpdb->esc_like('_site_transient_') . '%', $wpdb->esc_like('_site_transient_timeout_') . '%', time()));
    } elseif (is_multisite() && is_main_site() && is_main_network()) {
        // Multisite stores site transients in the sitemeta table.
        $wpdb->query($wpdb->prepare("DELETE a, b FROM {$wpdb->sitemeta} a, {$wpdb->sitemeta} b\n\t\t\t\tWHERE a.meta_key LIKE %s\n\t\t\t\tAND a.meta_key NOT LIKE %s\n\t\t\t\tAND b.meta_key = CONCAT( '_site_transient_timeout_', SUBSTRING( a.meta_key, 17 ) )\n\t\t\t\tAND b.meta_value < %d", $wpdb->esc_like('_site_transient_') . '%', $wpdb->esc_like('_site_transient_timeout_') . '%', time()));
    }
}

WordPress Version: 4.9

/**
 * Deletes all expired transients.
 *
 * The multi-table delete syntax is used to delete the transient record
 * from table a, and the corresponding transient_timeout record from table b.
 *
 * @since 4.9.0
 *
 * @param bool $force_db Optional. Force cleanup to run against the database even when an external object cache is used.
 */
function delete_expired_transients($force_db = false)
{
    global $wpdb;
    if (!$force_db && wp_using_ext_object_cache()) {
        return;
    }
    $wpdb->query($wpdb->prepare("DELETE a, b FROM {$wpdb->options} a, {$wpdb->options} b\n\t\t\tWHERE a.option_name LIKE %s\n\t\t\tAND a.option_name NOT LIKE %s\n\t\t\tAND b.option_name = CONCAT( '_transient_timeout_', SUBSTRING( a.option_name, 12 ) )\n\t\t\tAND b.option_value < %d", $wpdb->esc_like('_transient_') . '%', $wpdb->esc_like('_transient_timeout_') . '%', time()));
    if (!is_multisite()) {
        // non-Multisite stores site transients in the options table.
        $wpdb->query($wpdb->prepare("DELETE a, b FROM {$wpdb->options} a, {$wpdb->options} b\n\t\t\t\tWHERE a.option_name LIKE %s\n\t\t\t\tAND a.option_name NOT LIKE %s\n\t\t\t\tAND b.option_name = CONCAT( '_site_transient_timeout_', SUBSTRING( a.option_name, 17 ) )\n\t\t\t\tAND b.option_value < %d", $wpdb->esc_like('_site_transient_') . '%', $wpdb->esc_like('_site_transient_timeout_') . '%', time()));
    } elseif (is_multisite() && is_main_site() && is_main_network()) {
        // Multisite stores site transients in the sitemeta table.
        $wpdb->query($wpdb->prepare("DELETE a, b FROM {$wpdb->sitemeta} a, {$wpdb->sitemeta} b\n\t\t\t\tWHERE a.meta_key LIKE %s\n\t\t\t\tAND a.meta_key NOT LIKE %s\n\t\t\t\tAND b.meta_key = CONCAT( '_site_transient_timeout_', SUBSTRING( a.meta_key, 17 ) )\n\t\t\t\tAND b.meta_value < %d", $wpdb->esc_like('_site_transient_') . '%', $wpdb->esc_like('_site_transient_timeout_') . '%', time()));
    }
}