WordPress Version: 6.1
/**
* Checks lock status on the New/Edit Post screen and refresh the lock.
*
* @since 3.6.0
*
* @param array $response The Heartbeat response.
* @param array $data The $_POST data sent.
* @param string $screen_id The screen ID.
* @return array The Heartbeat response.
*/
function wp_refresh_post_lock($response, $data, $screen_id)
{
if (array_key_exists('wp-refresh-post-lock', $data)) {
$received = $data['wp-refresh-post-lock'];
$send = array();
$post_id = absint($received['post_id']);
if (!$post_id) {
return $response;
}
if (!current_user_can('edit_post', $post_id)) {
return $response;
}
$user_id = wp_check_post_lock($post_id);
$user = get_userdata($user_id);
if ($user) {
$error = array(
'name' => $user->display_name,
/* translators: %s: User's display name. */
'text' => sprintf(__('%s has taken over and is currently editing.'), $user->display_name),
);
if (get_option('show_avatars')) {
$error['avatar_src'] = get_avatar_url($user->ID, array('size' => 64));
$error['avatar_src_2x'] = get_avatar_url($user->ID, array('size' => 128));
}
$send['lock_error'] = $error;
} else {
$new_lock = wp_set_post_lock($post_id);
if ($new_lock) {
$send['new_lock'] = implode(':', $new_lock);
}
}
$response['wp-refresh-post-lock'] = $send;
}
return $response;
}