Title: WP_Upgrader::create_lock
Published: April 12, 2016
Last modified: May 20, 2026

---

# WP_Upgrader::create_lock( string $lock_name, int $release_timeout = null ): bool

## In this article

 * [Parameters](https://developer.wordpress.org/reference/classes/wp_upgrader/create_lock/?output_format=md#parameters)
 * [Return](https://developer.wordpress.org/reference/classes/wp_upgrader/create_lock/?output_format=md#return)
 * [Source](https://developer.wordpress.org/reference/classes/wp_upgrader/create_lock/?output_format=md#source)
 * [Related](https://developer.wordpress.org/reference/classes/wp_upgrader/create_lock/?output_format=md#related)
 * [Changelog](https://developer.wordpress.org/reference/classes/wp_upgrader/create_lock/?output_format=md#changelog)

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

Creates a lock using WordPress options.

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

 `$lock_name`stringrequired

The name of this unique lock.

`$release_timeout`intoptional

The duration in seconds to respect an existing lock.
 Default: 1 hour.

Default:`null`

## 󠀁[Return](https://developer.wordpress.org/reference/classes/wp_upgrader/create_lock/?output_format=md#return)󠁿

 bool False if a lock couldn’t be created or if the lock is still valid. True otherwise.

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

    ```php
    public static function create_lock( $lock_name, $release_timeout = null ) {
    	global $wpdb;
    	if ( ! $release_timeout ) {
    		$release_timeout = HOUR_IN_SECONDS;
    	}
    	$lock_option = $lock_name . '.lock';

    	// Try to lock.
    	$lock_result = $wpdb->query( $wpdb->prepare( "INSERT IGNORE INTO `$wpdb->options` ( `option_name`, `option_value`, `autoload` ) VALUES (%s, %s, 'off') /* LOCK */", $lock_option, time() ) );

    	if ( ! $lock_result ) {
    		$lock_result = get_option( $lock_option );

    		// If a lock couldn't be created, and there isn't a lock, bail.
    		if ( ! $lock_result ) {
    			return false;
    		}

    		// Check to see if the lock is still valid. If it is, bail.
    		if ( $lock_result > ( time() - $release_timeout ) ) {
    			return false;
    		}

    		// There must exist an expired lock, clear it and re-gain it.
    		WP_Upgrader::release_lock( $lock_name );

    		return WP_Upgrader::create_lock( $lock_name, $release_timeout );
    	}

    	// Update the lock, as by this point we've definitely got a lock, just need to fire the actions.
    	update_option( $lock_option, time(), false );

    	return true;
    }
    ```

[View all references](https://developer.wordpress.org/reference/files/wp-admin/includes/class-wp-upgrader.php/)
[View on Trac](https://core.trac.wordpress.org/browser/tags/7.0/src/wp-admin/includes/class-wp-upgrader.php#L1057)
[View on GitHub](https://github.com/WordPress/wordpress-develop/blob/7.0/src/wp-admin/includes/class-wp-upgrader.php#L1057-L1090)

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

| Uses | Description | 
| [WP_Upgrader::release_lock()](https://developer.wordpress.org/reference/classes/wp_upgrader/release_lock/)`wp-admin/includes/class-wp-upgrader.php` |

Releases an upgrader lock.

  | 
| [WP_Upgrader::create_lock()](https://developer.wordpress.org/reference/classes/wp_upgrader/create_lock/)`wp-admin/includes/class-wp-upgrader.php` |

Creates a lock using WordPress options.

  | 
| [wpdb::query()](https://developer.wordpress.org/reference/classes/wpdb/query/)`wp-includes/class-wpdb.php` |

Performs a database query, using current database connection.

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

Updates the value of an option that was already added.

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

Retrieves an option value based on an option name.

  | 
| [wpdb::prepare()](https://developer.wordpress.org/reference/classes/wpdb/prepare/)`wp-includes/class-wpdb.php` |

Prepares a SQL query for safe execution.

  |

[Show 3 more](https://developer.wordpress.org/reference/classes/wp_upgrader/create_lock/?output_format=md#)
[Show less](https://developer.wordpress.org/reference/classes/wp_upgrader/create_lock/?output_format=md#)

| Used by | Description | 
| [WP_Upgrader::create_lock()](https://developer.wordpress.org/reference/classes/wp_upgrader/create_lock/)`wp-admin/includes/class-wp-upgrader.php` |

Creates a lock using WordPress options.

  | 
| [WP_Automatic_Updater::run()](https://developer.wordpress.org/reference/classes/wp_automatic_updater/run/)`wp-admin/includes/class-wp-automatic-updater.php` |

Kicks off the background update process, looping through all pending updates.

  | 
| [Core_Upgrader::upgrade()](https://developer.wordpress.org/reference/classes/core_upgrader/upgrade/)`wp-admin/includes/class-core-upgrader.php` |

Upgrades WordPress core.

  |

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

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

## User Contributed Notes

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