Title: wp_validate_site_data
Published: February 22, 2019
Last modified: February 24, 2026

---

# wp_validate_site_data( WP_Error $errors, array $data, WP_Site|null $old_site = null )

## In this article

 * [Parameters](https://developer.wordpress.org/reference/functions/wp_validate_site_data/?output_format=md#parameters)
 * [Source](https://developer.wordpress.org/reference/functions/wp_validate_site_data/?output_format=md#source)
 * [Related](https://developer.wordpress.org/reference/functions/wp_validate_site_data/?output_format=md#related)
 * [Changelog](https://developer.wordpress.org/reference/functions/wp_validate_site_data/?output_format=md#changelog)

[ Back to top](https://developer.wordpress.org/reference/functions/wp_validate_site_data/?output_format=md#wp--skip-link--target)

Validates data for a site prior to inserting or updating in the database.

## 󠀁[Parameters](https://developer.wordpress.org/reference/functions/wp_validate_site_data/?output_format=md#parameters)󠁿

 `$errors`[WP_Error](https://developer.wordpress.org/reference/classes/wp_error/)
required

Error object, passed by reference. Will contain validation errors if any occurred.

`$data`arrayrequired

Associative array of complete site data. See [wp_insert_site()](https://developer.wordpress.org/reference/functions/wp_insert_site/)
for the included data.

`$old_site`[WP_Site](https://developer.wordpress.org/reference/classes/wp_site/)
|nulloptional

The old site object if the data belongs to a site being updated, or null if it is
a new site being inserted.

Default:`null`

## 󠀁[Source](https://developer.wordpress.org/reference/functions/wp_validate_site_data/?output_format=md#source)󠁿

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

[View all references](https://developer.wordpress.org/reference/files/wp-includes/ms-site.php/)
[View on Trac](https://core.trac.wordpress.org/browser/tags/6.9.4/src/wp-includes/ms-site.php#L575)
[View on GitHub](https://github.com/WordPress/wordpress-develop/blob/6.9.4/src/wp-includes/ms-site.php#L575-L626)

## 󠀁[Related](https://developer.wordpress.org/reference/functions/wp_validate_site_data/?output_format=md#related)󠁿

| Uses | Description | 
| [wp_checkdate()](https://developer.wordpress.org/reference/functions/wp_checkdate/)`wp-includes/functions.php` |

Tests if the supplied date is valid for the Gregorian calendar.

  | 
| [domain_exists()](https://developer.wordpress.org/reference/functions/domain_exists/)`wp-includes/ms-functions.php` |

Checks whether a site name is already taken.

  | 
| [__()](https://developer.wordpress.org/reference/functions/__/)`wp-includes/l10n.php` |

Retrieves the translation of $text.

  |

[Show 1 more](https://developer.wordpress.org/reference/functions/wp_validate_site_data/?output_format=md#)
[Show less](https://developer.wordpress.org/reference/functions/wp_validate_site_data/?output_format=md#)

## 󠀁[Changelog](https://developer.wordpress.org/reference/functions/wp_validate_site_data/?output_format=md#changelog)󠁿

| Version | Description | 
| [5.1.0](https://developer.wordpress.org/reference/since/5.1.0/) | Introduced. |

## User Contributed Notes

You must [log in](https://login.wordpress.org/?redirect_to=https%3A%2F%2Fdeveloper.wordpress.org%2Freference%2Ffunctions%2Fwp_validate_site_data%2F)
before being able to contribute a note or feedback.