wp_validate_site_data

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

WordPress Version: 5.1

/**
 * Validates data for a site prior to inserting or updating in the database.
 *
 * @since 5.1.0
 *
 * @param WP_Error     $errors   Error object, passed by reference. Will contain validation errors if
 *                               any occurred.
 * @param array        $data     Associative array of complete site data. See {@see wp_insert_site()}
 *                               for the included data.
 * @param WP_Site|null $old_site The old site object if the data belongs to a site being updated,
 *                               or null if it is a new site being inserted.
 */
function wp_validate_site_data($errors, $data, $old_site = null)
{
    // A domain must always be present.
    if (empty($data['domain'])) {
        $errors->add('site_empty_domain', __('Site domain must not be empty.'));
    }
    // A path must always be present.
    if (empty($data['path'])) {
        $errors->add('site_empty_path', __('Site path must not be empty.'));
    }
    // A network ID must always be present.
    if (empty($data['network_id'])) {
        $errors->add('site_empty_network_id', __('Site network ID must be provided.'));
    }
    // Both registration and last updated dates must always be present and valid.
    $date_fields = array('registered', 'last_updated');
    foreach ($date_fields as $date_field) {
        if (empty($data[$date_field])) {
            $errors->add('site_empty_' . $date_field, __('Both registration and last updated dates must be provided.'));
            break;
        }
        // Allow '0000-00-00 00:00:00', although it be stripped out at this point.
        if ('0000-00-00 00:00:00' !== $data[$date_field]) {
            $month = substr($data[$date_field], 5, 2);
            $day = substr($data[$date_field], 8, 2);
            $year = substr($data[$date_field], 0, 4);
            $valid_date = wp_checkdate($month, $day, $year, $data[$date_field]);
            if (!$valid_date) {
                $errors->add('site_invalid_' . $date_field, __('Both registration and last updated dates must be valid dates.'));
                break;
            }
        }
    }
    if (!empty($errors->errors)) {
        return;
    }
    // If a new site, or domain/path/network ID have changed, ensure uniqueness.
    if (!$old_site || $data['domain'] !== $old_site->domain || $data['path'] !== $old_site->path || $data['network_id'] !== $old_site->network_id) {
        if (domain_exists($data['domain'], $data['path'], $data['network_id'])) {
            $errors->add('site_taken', __('Sorry, that site already exists!'));
        }
    }
}