WP_Sync_Post_Meta_Storage::set_awareness_state( string $room,  $awareness ): bool

In this article

Sets awareness state for a given room.

Parameters

$roomstringrequired
Room identifier.
mixed> $awareness Serializable awareness state.

Return

bool True on success, false on failure.

Source

public function set_awareness_state( string $room, array $awareness ): bool {
	global $wpdb;

	$post_id = $this->get_storage_post_id( $room );
	if ( null === $post_id ) {
		return false;
	}

	// Use direct database operation to avoid cache invalidation performed by
	// post meta functions (`wp_cache_set_posts_last_changed()` and direct
	// `wp_cache_delete()` calls).
	//
	// If two concurrent requests both see no row and both INSERT, the
	// duplicate is harmless: get_awareness_state() reads the latest row
	// (ORDER BY meta_id DESC).
	$meta_id = $wpdb->get_var(
		$wpdb->prepare(
			"SELECT meta_id FROM $wpdb->postmeta WHERE post_id = %d AND meta_key = %s ORDER BY meta_id DESC LIMIT 1",
			$post_id,
			self::AWARENESS_META_KEY
		)
	);

	if ( $meta_id ) {
		return (bool) $wpdb->update(
			$wpdb->postmeta,
			array( 'meta_value' => wp_json_encode( $awareness ) ),
			array( 'meta_id' => $meta_id ),
			array( '%s' ),
			array( '%d' )
		);
	}

	return (bool) $wpdb->insert(
		$wpdb->postmeta,
		array(
			'post_id'    => $post_id,
			'meta_key'   => self::AWARENESS_META_KEY,
			'meta_value' => wp_json_encode( $awareness ),
		),
		array( '%d', '%s', '%s' )
	);
}

Changelog

VersionDescription
7.0.0Introduced.

User Contributed Notes

You must log in before being able to contribute a note or feedback.