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!'));
}
}
}