editor->getLockedUser($post_id); if (!$locked_user || !empty($data['elementor_force_post_lock'])) { Plugin::$instance->editor->lockPost($post_id); } else { $response['locked_user'] = $locked_user->display_name; } /* @var Core\Common\Modules\Ajax\Module $ajax */ $ajax = Plugin::$instance->common->getComponent('ajax'); $response['elementorNonce'] = $ajax->createNonce(); } return $response; } /** * Refresh nonces. * * Filter the nonces to send to the editor when editing with Elementor. Used * to refresh the nonce when the nonce expires while editing. This way the * user doesn't need to log-in again as Elementor fetches the new nonce from * the server using ajax. * * Fired by `wp_refresh_nonces` filter. * * @since 1.8.0 * * @param array $response The no-priv Heartbeat response object or array * @param array $data The POST data sent * * @return array Refreshed nonces */ public function refreshNonces($response, $data) { if (isset($data['elementor_post_lock']['post_ID'])) { /* @var Core\Common\Modules\Ajax\Module $ajax */ $ajax = Plugin::$instance->common->getComponent('ajax'); $response['elementor-refresh-nonces'] = [ 'elementorNonce' => $ajax->createNonce(), 'heartbeatNonce' => wp_create_nonce('heartbeat-nonce'), ]; } return $response; } /** * Heartbeat constructor. * * Initializing Elementor heartbeat. * * @since 1.0.0 */ public function __construct() { add_filter('heartbeat_received', [$this, 'heartbeatReceived'], 10, 2); add_filter('wp_refresh_nonces', [$this, 'refreshNonces'], 30, 2); } }