{"id":309830,"date":"2026-05-15T10:41:50","date_gmt":"2026-05-15T10:41:50","guid":{"rendered":"https:\/\/wordpress.org\/plugins\/team-messenger\/"},"modified":"2026-05-15T10:41:16","modified_gmt":"2026-05-15T10:41:16","slug":"team-messenger","status":"publish","type":"plugin","link":"https:\/\/wordpress.org\/plugins\/team-messenger\/","author":15728675,"comment_status":"closed","ping_status":"closed","template":"","meta":{"version":"1.0.8","stable_tag":"1.0.8","tested":"6.9.4","requires":"6.2","requires_php":"7.4","requires_plugins":null,"header_name":"Team Messenger","header_author":"Alireza Aminzadeh","header_description":"A real-time chat plugin for logged-in WordPress users with optional End-to-End Encryption.","assets_banners_color":"","last_updated":"2026-05-15 10:41:16","external_support_url":"","external_repository_url":"","donate_link":"","header_plugin_uri":"https:\/\/ariacoder.ir\/wp-persian-chat\/","header_author_uri":"https:\/\/aryait.net","rating":0,"author_block_rating":0,"active_installs":0,"downloads":13,"num_ratings":0,"support_threads":0,"support_threads_resolved":0,"author_block_count":0,"sections":["description","installation","faq","changelog"],"tags":{"1.0.8":{"tag":"1.0.8","author":"syeedalireza","date":"2026-05-15 10:41:16"}},"upgrade_notice":{"1.0.8":"<p>Critical security release: the media download endpoint now enforces per-file ownership checks. Update immediately.<\/p>","1.0.7":"<p>Security and compliance release addressing all issues raised during the WordPress.org plugin review. Update strongly recommended.<\/p>","1.0.6":"<p>Maintenance release; update recommended before publishing to the plugin directory.<\/p>"},"ratings":[],"assets_icons":[],"assets_banners":[],"assets_blueprints":{},"all_blocks":[],"tagged_versions":["1.0.8"],"block_files":[],"assets_screenshots":[],"screenshots":{"1":"Floating chat widget and conversations","2":"Admin messenger and dashboard widgets"},"jetpack_post_was_ever_published":false},"plugin_section":[262246],"plugin_tags":[5707,12167,353,2512,3491],"plugin_category":[41,44,58],"plugin_contributors":[253123],"plugin_business_model":[],"class_list":["post-309830","plugin","type-plugin","status-publish","hentry","plugin_section-dashboard-widgets","plugin_tags-chat","plugin_tags-encryption","plugin_tags-groups","plugin_tags-messaging","plugin_tags-team","plugin_category-communication","plugin_category-discussion-and-community","plugin_category-user-management","plugin_contributors-syeedalireza","plugin_committers-syeedalireza"],"banners":[],"icons":{"svg":false,"icon":"https:\/\/s.w.org\/plugins\/geopattern-icon\/team-messenger.svg","icon_2x":false,"generated":true},"screenshots":[],"raw_content":"<!--section=description-->\n<p>Team Messenger is a WordPress plugin that adds secure, real-time messaging for logged-in users. It combines direct (1:1) chats, group rooms, optional end-to-end encryption for private threads, media uploads with administrator-controlled policies, presence, notification badges, pinned messages, and dedicated UIs on both the public site and in wp-admin.<\/p>\n\n<p>Technical details and changelog notes may be published on the plugin support page or documentation as they are updated.<\/p>\n\n<h3>English \u2014 Numbered feature list<\/h3>\n\n<ol>\n<li><p>Real-time direct messaging between logged-in WordPress users over the REST API (<code>team_messenger\/v1<\/code>), with pagination for message history.<\/p><\/li>\n<li><p>Optional end-to-end encryption (E2E) for direct messages: clients can exchange messages flagged as encrypted; public keys are stored per user via dedicated REST endpoints (<code>\/keys<\/code>). Group chats remain readable on the server (plaintext server-side).<\/p><\/li>\n<li><p>Full group chat lifecycle: create, read, update, and delete groups; set name, description, and a group avatar; list members; add or remove members; promote or demote roles via PATCH on members.<\/p><\/li>\n<li><p>Rich media in chats: images, video, and audio attachments; optional voice messages recorded in the browser (MediaRecorder, typically WebM\/WebA) with server-side MIME handling for reliable uploads.<\/p><\/li>\n<li><p>Two upload contexts on <code>\/media\/upload<\/code>: <code>chat<\/code> for conversation attachments and <code>avatar<\/code> for group profile images, each with independent size and format rules enforced on the server.<\/p><\/li>\n<li><p>Administrator-configurable media policy: separate maximum file sizes for chat (0.1\u2013100 MB) and group avatars (0.1\u201350 MB); toggles for allowed chat categories (image \/ video \/ audio) and allowed avatar formats (e.g. JPEG, PNG, GIF, WebP). Limits are exposed to the client as hints; the server performs final validation.<\/p><\/li>\n<li><p>Flexible storage for uploaded files: attachments can live in the WordPress Media Library or in a plugin-protected directory (<code>.htaccess<\/code> where applicable), with authenticated download through <code>\/media\/download\/{file}<\/code> for the private storage path.<\/p><\/li>\n<li><p>\u201cSaved messages\u201d (self-chat): a personal notebook thread with the current user as both sides, for notes and files.<\/p><\/li>\n<li><p>Recent conversations: when no search query is sent, the user list prioritizes people you have recently messaged, without exposing the entire user directory.<\/p><\/li>\n<li><p>Privacy-conscious user search: requires at least three characters and returns a capped number of results.<\/p><\/li>\n<li><p>Presence (online \/ last seen): clients send a throttled heartbeat to <code>POST \/presence<\/code>; <code>last_seen<\/code> and <code>is_online<\/code> are returned in user lists only when the viewer has shared DM history with that user or shares a group (privacy-preserving).<\/p><\/li>\n<li><p>Notifications: <code>GET \/notifications\/counts<\/code> returns separate counts and text previews for new personal and group activity since the last acknowledgment; <code>POST \/notifications\/ack<\/code> supports <code>scope<\/code>: <code>all<\/code>, <code>personal<\/code>, or <code>group<\/code>.<\/p><\/li>\n<li><p>WordPress admin bar integration: when the toolbar is visible, separate nodes show personal and group chat badges; dropdowns load preview snippets (periodic polling) and allow clearing notifications by scope. Non-administrators link to the site home; users with <code>manage_options<\/code> can jump to the full messenger screen.<\/p><\/li>\n<li><p>Dashboard widgets (administrators): two WordPress Dashboard widgets\u2014personal (1:1) and group\u2014provide inline chat with the same REST capabilities as the main messenger (including pins and upload limits), visible only to users with <code>manage_options<\/code> who have not disabled admin chat.<\/p><\/li>\n<li><p>Pinned messages: one pin per direct thread (stored in <code>team_messenger_direct_pins<\/code>) and one per group (<code>pinned_message_id<\/code>); pin\/unpin from the floating widget, <code>[team_messenger_web_chat]<\/code>, admin messenger, and dashboard widgets; a pinned strip shows a snippet and scroll-to-message; pins clear if the underlying message is deleted.<\/p><\/li>\n<li><p>Read state: opening a direct thread marks incoming messages from the partner as read (<code>is_read<\/code>). For groups, per-user last-read timestamps sync when the thread is opened; your own outgoing group messages can show read receipts (\u201csent\u201d vs \u201cread\u201d) when all other members have caught up.<\/p><\/li>\n<li><p>Message lifecycle: edit or soft-delete your own messages in direct and group threads (API supports edit\/delete on owned messages).<\/p><\/li>\n<li><p>Data retention: a daily scheduled event permanently removes soft-deleted direct and group messages whose <code>deleted_at<\/code> is older than 30 days (GDPR-oriented housekeeping).<\/p><\/li>\n<li><p>Multiple surfaces: floating chat widget on the front end; full-page <code>[team_messenger_web_chat]<\/code> shortcode with configurable HTML fallback for guests; dedicated admin \u201cMessenger\u201d screen; optional floating FAB on all wp-admin screens (toggle in settings, respects per-user \u201chide admin chat\u201d); admin bar badges; two dashboard widgets for admins.<\/p><\/li>\n<li><p>Customization in settings: primary accent color, widget corner placement, welcome text, shortcode guest content (visual\/HTML editor), and site-wide \u201cshow messenger on all wp-admin screens.\u201d<\/p><\/li>\n<li><p>Per-user preferences on the user profile: optionally hide front-end chat (widget + shortcode UI) and\/or all wp-admin chat (floating messenger, full messenger page, admin bar nodes, dashboard widgets). Shortcode pages show a short notice if frontend chat is disabled for that user.<\/p><\/li>\n<li><p>Abuse protection: rate limiting on sending messages and on creating groups to reduce spam and overload.<\/p><\/li>\n<li><p>Internationalization: text domain <code>team-messenger<\/code>; Persian (<code>fa_IR<\/code>) and other translations can ship via the <code>languages<\/code> folder; English is the source language.<\/p><\/li>\n<\/ol>\n\n<h3>\u0641\u0627\u0631\u0633\u06cc \u2014 \u0641\u0647\u0631\u0633\u062a \u0634\u0645\u0627\u0631\u0647\u200c\u062f\u0627\u0631 \u0627\u0645\u06a9\u0627\u0646\u0627\u062a<\/h3>\n\n<p>\u06f1. \u067e\u06cc\u0627\u0645\u200c\u0631\u0633\u0627\u0646\u06cc \u0645\u0633\u062a\u0642\u06cc\u0645 (\u06cc\u06a9\u200c\u0628\u0647\u200c\u06cc\u06a9) \u0628\u06cc\u0646 \u06a9\u0627\u0631\u0628\u0631\u0627\u0646 \u0648\u0627\u0631\u062f\u0634\u062f\u0647\u0654 \u0648\u0631\u062f\u067e\u0631\u0633 \u0627\u0632 \u0637\u0631\u06cc\u0642 REST API \u0628\u0627 \u0646\u0627\u0645 \u0641\u0636\u0627\u06cc <code>team_messenger\/v1<\/code> \u0648 \u0635\u0641\u062d\u0647\u200c\u0628\u0646\u062f\u06cc \u062a\u0627\u0631\u06cc\u062e\u0686\u0647\u0654 \u067e\u06cc\u0627\u0645.<\/p>\n\n<p>\u06f2. \u0631\u0645\u0632\u0646\u06af\u0627\u0631\u06cc \u0633\u0631\u062a\u0627\u0633\u0631\u06cc \u0627\u062e\u062a\u06cc\u0627\u0631\u06cc \u0628\u0631\u0627\u06cc \u06af\u0641\u062a\u06af\u0648\u06cc \u062e\u0635\u0648\u0635\u06cc: \u0627\u0645\u06a9\u0627\u0646 \u0630\u062e\u06cc\u0631\u0647\u0654 \u067e\u06cc\u0627\u0645 \u0628\u0627 \u067e\u0631\u0686\u0645 \u0631\u0645\u0632\u0634\u062f\u0647\u061b \u06a9\u0644\u06cc\u062f\u0647\u0627\u06cc \u0639\u0645\u0648\u0645\u06cc \u0628\u0627 endpoint\u0647\u0627\u06cc <code>\/keys<\/code> \u0630\u062e\u06cc\u0631\u0647 \u0648 \u0628\u0627\u0632\u06cc\u0627\u0628\u06cc \u0645\u06cc\u200c\u0634\u0648\u0646\u062f. \u062f\u0631 \u06af\u0631\u0648\u0647\u060c \u0645\u062a\u0646 \u0631\u0648\u06cc \u0633\u0631\u0648\u0631 \u0628\u0647\u200c\u0635\u0648\u0631\u062a \u0645\u062a\u0646 \u0639\u0627\u062f\u06cc \u0642\u0627\u0628\u0644 \u067e\u0631\u062f\u0627\u0632\u0634 \u0627\u0633\u062a.<\/p>\n\n<p>\u06f3. \u0645\u062f\u06cc\u0631\u06cc\u062a \u06a9\u0627\u0645\u0644 \u0686\u062a \u06af\u0631\u0648\u0647\u06cc: \u0627\u06cc\u062c\u0627\u062f\u060c \u0648\u06cc\u0631\u0627\u06cc\u0634\u060c \u062d\u0630\u0641 \u06af\u0631\u0648\u0647\u061b \u0646\u0627\u0645\u060c \u062a\u0648\u0636\u06cc\u062d\u0627\u062a \u0648 \u0622\u0648\u0627\u062a\u0627\u0631 \u06af\u0631\u0648\u0647\u061b \u0641\u0647\u0631\u0633\u062a \u0648 \u0627\u0641\u0632\u0648\u062f\u0646\/\u062d\u0630\u0641 \u0639\u0636\u0648\u061b \u062a\u063a\u06cc\u06cc\u0631 \u0646\u0642\u0634 \u0628\u0627 PATCH \u0631\u0648\u06cc \u0639\u0636\u0648.<\/p>\n\n<p>\u06f4. \u0631\u0633\u0627\u0646\u0647\u0654 \u063a\u0646\u06cc: \u062a\u0635\u0648\u06cc\u0631\u060c \u0648\u06cc\u062f\u06cc\u0648 \u0648 \u0635\u0648\u062a\u061b \u067e\u06cc\u0627\u0645 \u0635\u0648\u062a\u06cc \u0628\u0627 \u0636\u0628\u0637 \u062f\u0631 \u0645\u0631\u0648\u0631\u06af\u0631 (\u0645\u0639\u0645\u0648\u0644\u0627\u064b WebM\/WebA) \u0648 \u0646\u0631\u0645\u0627\u0644\u200c\u0633\u0627\u0632\u06cc MIME \u062f\u0631 \u0633\u0631\u0648\u0631.<\/p>\n\n<p>\u06f5. \u062f\u0648 \u0632\u0645\u06cc\u0646\u0647\u0654 \u0622\u067e\u0644\u0648\u062f \u062f\u0631 <code>\/media\/upload<\/code>: <code>chat<\/code> \u0628\u0631\u0627\u06cc \u067e\u06cc\u0648\u0633\u062a \u06af\u0641\u062a\u06af\u0648 \u0648 <code>avatar<\/code> \u0628\u0631\u0627\u06cc \u062a\u0635\u0648\u06cc\u0631 \u067e\u0631\u0648\u0641\u0627\u06cc\u0644 \u06af\u0631\u0648\u0647\u060c \u0647\u0631 \u06a9\u062f\u0627\u0645 \u0628\u0627 \u0633\u0642\u0641 \u062d\u062c\u0645 \u0648 \u0641\u0631\u0645\u062a \u0645\u0633\u062a\u0642\u0644 \u0648 \u0627\u0639\u062a\u0628\u0627\u0631\u0633\u0646\u062c\u06cc \u0633\u0631\u0648\u0631\u06cc.<\/p>\n\n<p>\u06f6. \u0633\u06cc\u0627\u0633\u062a \u0631\u0633\u0627\u0646\u0647 \u0627\u0632 \u067e\u0646\u0644 \u0645\u062f\u06cc\u0631: \u062d\u062f\u0627\u06a9\u062b\u0631 \u062d\u062c\u0645 \u062c\u062f\u0627 \u0628\u0631\u0627\u06cc \u0686\u062a (\u06f0\u066b\u06f1 \u062a\u0627 \u06f1\u06f0\u06f0 \u0645\u06af\u0627\u0628\u0627\u06cc\u062a) \u0648 \u0622\u0648\u0627\u062a\u0627\u0631 (\u06f0\u066b\u06f1 \u062a\u0627 \u06f5\u06f0 \u0645\u06af\u0627\u0628\u0627\u06cc\u062a)\u061b \u0631\u0648\u0634\u0646\/\u062e\u0627\u0645\u0648\u0634 \u0628\u0648\u062f\u0646 \u062f\u0633\u062a\u0647\u200c\u0647\u0627\u06cc \u0645\u062c\u0627\u0632 \u0686\u062a \u0648 \u0641\u0631\u0645\u062a\u200c\u0647\u0627\u06cc \u0645\u062c\u0627\u0632 \u0622\u0648\u0627\u062a\u0627\u0631\u061b \u0627\u0639\u062f\u0627\u062f \u0628\u0647\u200c\u0639\u0646\u0648\u0627\u0646 \u0631\u0627\u0647\u0646\u0645\u0627 \u0628\u0647 \u06a9\u0644\u0627\u06cc\u0646\u062a \u0645\u06cc\u200c\u0631\u0648\u062f\u060c \u062a\u0635\u0645\u06cc\u0645 \u0646\u0647\u0627\u06cc\u06cc \u0628\u0627 \u0633\u0631\u0648\u0631 \u0627\u0633\u062a.<\/p>\n\n<p>\u06f7. \u0630\u062e\u06cc\u0631\u0647\u200c\u0633\u0627\u0632\u06cc \u0627\u0646\u0639\u0637\u0627\u0641\u200c\u067e\u0630\u06cc\u0631: \u06a9\u062a\u0627\u0628\u062e\u0627\u0646\u0647\u0654 \u0631\u0633\u0627\u0646\u0647\u0654 \u0648\u0631\u062f\u067e\u0631\u0633 \u06cc\u0627 \u067e\u0648\u0634\u0647\u0654 \u0645\u062d\u0627\u0641\u0638\u062a\u200c\u0634\u062f\u0647\u0654 \u0627\u0641\u0632\u0648\u0646\u0647 \u0628\u0627 <code>.htaccess<\/code>\u061b \u0628\u0631\u0627\u06cc \u0645\u0633\u06cc\u0631 \u0627\u062e\u062a\u0635\u0627\u0635\u06cc\u060c \u062f\u0627\u0646\u0644\u0648\u062f \u0627\u0645\u0646 \u0628\u0627 <code>\/media\/download\/{file}<\/code> \u0641\u0642\u0637 \u0628\u0631\u0627\u06cc \u06a9\u0627\u0631\u0628\u0631 \u0627\u062d\u0631\u0627\u0632 \u0647\u0648\u06cc\u062a\u200c\u0634\u062f\u0647.<\/p>\n\n<p>\u06f8. \u00ab\u067e\u06cc\u0627\u0645\u200c\u0647\u0627\u06cc \u0630\u062e\u06cc\u0631\u0647\u200c\u0634\u062f\u0647\u00bb (\u0686\u062a \u0628\u0627 \u062e\u0648\u062f): \u0641\u0636\u0627\u06cc \u0634\u062e\u0635\u06cc \u0628\u0631\u0627\u06cc \u06cc\u0627\u062f\u062f\u0627\u0634\u062a \u0648 \u0641\u0627\u06cc\u0644 \u0628\u0627 \u0647\u0645\u0627\u0646 \u06a9\u0627\u0631\u0628\u0631 \u0628\u0647\u200c\u0639\u0646\u0648\u0627\u0646 \u0637\u0631\u0641 \u06af\u0641\u062a\u06af\u0648.<\/p>\n\n<p>\u06f9. \u06af\u0641\u062a\u06af\u0648\u0647\u0627\u06cc \u0627\u062e\u06cc\u0631: \u0628\u062f\u0648\u0646 query \u062c\u0633\u062a\u062c\u0648\u060c \u0627\u0648\u0644\u0648\u06cc\u062a \u0628\u0627 \u06a9\u0633\u0627\u0646\u06cc \u0627\u0633\u062a \u06a9\u0647 \u0627\u062e\u06cc\u0631\u0627\u064b \u067e\u06cc\u0627\u0645 \u062f\u0627\u062f\u0647\u200c\u0627\u06cc\u062f\u061b \u06a9\u0644 \u062f\u0627\u06cc\u0631\u06a9\u062a\u0648\u0631\u06cc \u06a9\u0627\u0631\u0628\u0631\u0627\u0646 \u0627\u0641\u0634\u0627 \u0646\u0645\u06cc\u200c\u0634\u0648\u062f.<\/p>\n\n<p>\u06f1\u06f0. \u062c\u0633\u062a\u062c\u0648\u06cc \u06a9\u0627\u0631\u0628\u0631 \u0628\u0627 \u062d\u0631\u06cc\u0645 \u062e\u0635\u0648\u0635\u06cc: \u062d\u062f\u0627\u0642\u0644 \u0633\u0647 \u06a9\u0627\u0631\u0627\u06a9\u062a\u0631 \u0648 \u0633\u0642\u0641 \u062a\u0639\u062f\u0627\u062f \u0646\u062a\u06cc\u062c\u0647.<\/p>\n\n<p>\u06f1\u06f1. \u062d\u0636\u0648\u0631 (\u0622\u0646\u0644\u0627\u06cc\u0646 \/ \u0622\u062e\u0631\u06cc\u0646 \u0641\u0639\u0627\u0644\u06cc\u062a): \u0636\u0631\u0628\u0627\u0646 throttled \u0628\u0627 <code>POST \/presence<\/code>\u061b \u0646\u0645\u0627\u06cc\u0634 <code>last_seen<\/code> \u0648 <code>is_online<\/code> \u0641\u0642\u0637 \u0627\u06af\u0631 \u0633\u0627\u0628\u0642\u0647\u0654 \u067e\u06cc\u0627\u0645 \u062e\u0635\u0648\u0635\u06cc \u0645\u0634\u062a\u0631\u06a9 \u06cc\u0627 \u0639\u0636\u0648\u06cc\u062a \u06af\u0631\u0648\u0647 \u0645\u0634\u062a\u0631\u06a9 \u0648\u062c\u0648\u062f \u062f\u0627\u0634\u062a\u0647 \u0628\u0627\u0634\u062f.<\/p>\n\n<p>\u06f1\u06f2. \u0627\u0639\u0644\u0627\u0646\u200c\u0647\u0627: <code>GET \/notifications\/counts<\/code> \u0634\u0645\u0627\u0631\u0646\u062f\u0647 \u0648 \u067e\u06cc\u0634\u200c\u0646\u0645\u0627\u06cc\u0634 \u0645\u062a\u0646 \u0628\u0631\u0627\u06cc \u067e\u06cc\u0627\u0645 \u0634\u062e\u0635\u06cc \u0648 \u06af\u0631\u0648\u0647\u06cc \u0627\u0632 \u0632\u0645\u0627\u0646 \u0622\u062e\u0631\u06cc\u0646 \u062a\u0623\u06cc\u06cc\u062f\u061b <code>POST \/notifications\/ack<\/code> \u0628\u0627 <code>all<\/code> \/ <code>personal<\/code> \/ <code>group<\/code>.<\/p>\n\n<p>\u06f1\u06f3. \u0646\u0648\u0627\u0631 \u0627\u0628\u0632\u0627\u0631 \u0648\u0631\u062f\u067e\u0631\u0633: \u062f\u0648 \u06af\u0631\u0647 \u062c\u062f\u0627 \u0628\u0631\u0627\u06cc \u0686\u062a \u0634\u062e\u0635\u06cc \u0648 \u06af\u0631\u0648\u0647\u06cc \u0628\u0627 \u0634\u0645\u0627\u0631\u0646\u062f\u0647 \u0648 \u0645\u0646\u0648\u06cc \u06a9\u0634\u0648\u06cc\u06cc (\u067eolling \u0628\u0631\u0627\u06cc \u067e\u06cc\u0634\u200c\u0646\u0645\u0627\u06cc\u0634\u061b \u067e\u0627\u06a9\u200c\u0633\u0627\u0632\u06cc \u0645\u062d\u062f\u0648\u062f\u0647\u200c\u0627\u06cc). \u063a\u06cc\u0631\u0645\u062f\u06cc\u0631 \u0628\u0647 \u062e\u0627\u0646\u0647\u061b \u0645\u062f\u06cc\u0631 \u0628\u0627 <code>manage_options<\/code> \u0628\u0647 \u067e\u06cc\u0627\u0645\u200c\u0631\u0633\u0627\u0646 \u06a9\u0627\u0645\u0644.<\/p>\n\n<p>\u06f1\u06f4. \u0648\u06cc\u062c\u062a \u062f\u0627\u0634\u0628\u0648\u0631\u062f (\u0645\u062f\u06cc\u0631\u0627\u0646): \u062f\u0648 \u0648\u06cc\u062c\u062a \u062c\u062f\u0627 \u062f\u0631 \u067e\u06cc\u0634\u062e\u0648\u0627\u0646 \u0648\u0631\u062f\u067e\u0631\u0633 \u0628\u0631\u0627\u06cc \u06af\u0641\u062a\u06af\u0648\u06cc \u0634\u062e\u0635\u06cc \u0648 \u06af\u0631\u0648\u0647\u06cc \u0628\u0627 \u0647\u0645\u0627\u0646 API (\u0627\u0632 \u062c\u0645\u0644\u0647 \u067e\u06cc\u0646 \u0648 \u0645\u062d\u062f\u0648\u062f\u06cc\u062a \u0622\u067e\u0644\u0648\u062f)\u061b \u0641\u0642\u0637 \u0628\u0631\u0627\u06cc <code>manage_options<\/code> \u0648 \u0627\u06af\u0631 \u0686\u062a \u0627\u062f\u0645\u06cc\u0646 \u062e\u0627\u0645\u0648\u0634 \u0646\u0628\u0627\u0634\u062f.<\/p>\n\n<p>\u06f1\u06f5. \u067e\u06cc\u0627\u0645 \u067e\u06cc\u0646\u200c\u0634\u062f\u0647: \u06cc\u06a9 \u067e\u06cc\u0646 \u0628\u0631\u0627\u06cc \u0647\u0631 \u06af\u0641\u062a\u06af\u0648\u06cc \u062f\u0648 \u0646\u0641\u0631\u0647 \u0648 \u06cc\u06a9 \u067e\u06cc\u0646 \u0628\u0631\u0627\u06cc \u0647\u0631 \u06af\u0631\u0648\u0647\u061b \u062f\u0631 \u0648\u06cc\u062c\u062a\u060c \u0634\u0648\u0631\u062a\u200c\u06a9\u062f\u060c \u067e\u06cc\u0627\u0645\u200c\u0631\u0633\u0627\u0646 \u0627\u062f\u0645\u06cc\u0646 \u0648 \u062f\u0627\u0634\u0628\u0648\u0631\u062f\u061b \u0646\u0648\u0627\u0631 \u067e\u06cc\u0646 \u0628\u0627 \u0627\u0633\u06a9\u0631\u0648\u0644 \u0628\u0647 \u067e\u06cc\u0627\u0645\u061b \u0628\u0627 \u062d\u0630\u0641 \u067e\u06cc\u0627\u0645\u060c \u067e\u06cc\u0646 \u0647\u0645 \u062d\u0630\u0641 \u0645\u06cc\u200c\u0634\u0648\u062f.<\/p>\n\n<p>\u06f1\u06f6. \u0648\u0636\u0639\u06cc\u062a \u062e\u0648\u0627\u0646\u062f\u0647\u200c\u0634\u062f\u0646: \u0628\u0627\u0632 \u06a9\u0631\u062f\u0646 \u06af\u0641\u062a\u06af\u0648\u06cc \u062e\u0635\u0648\u0635\u06cc\u060c \u067e\u06cc\u0627\u0645\u200c\u0647\u0627\u06cc \u0648\u0631\u0648\u062f\u06cc \u0637\u0631\u0641 \u0631\u0627 <code>is_read<\/code> \u0645\u06cc\u200c\u06a9\u0646\u062f\u061b \u062f\u0631 \u06af\u0631\u0648\u0647\u060c timestamp \u0622\u062e\u0631\u06cc\u0646 \u0628\u0627\u0632\u062f\u06cc\u062f \u0647\u0631 \u06a9\u0627\u0631\u0628\u0631 \u0647\u0645\u06af\u0627\u0645 \u0645\u06cc\u200c\u0634\u0648\u062f\u061b \u0628\u0631\u0627\u06cc \u067e\u06cc\u0627\u0645\u200c\u0647\u0627\u06cc \u062e\u0631\u0648\u062c\u06cc \u062e\u0648\u062f\u062a\u0627\u0646 \u0645\u06cc\u200c\u062a\u0648\u0627\u0646 \u0631\u0633\u06cc\u062f \u00ab\u0647\u0645\u0647 \u062e\u0648\u0627\u0646\u062f\u0646\u062f\u00bb \u0631\u0627 \u0646\u0634\u0627\u0646 \u062f\u0627\u062f.<\/p>\n\n<p>\u06f1\u06f7. \u0686\u0631\u062e\u0647\u0654 \u067e\u06cc\u0627\u0645: \u0648\u06cc\u0631\u0627\u06cc\u0634 \u0648 \u062d\u0630\u0641 \u0646\u0631\u0645 \u067e\u06cc\u0627\u0645\u200c\u0647\u0627\u06cc \u062e\u0648\u062f \u062f\u0631 \u062e\u0635\u0648\u0635\u06cc \u0648 \u06af\u0631\u0648\u0647 \u0627\u0632 \u0637\u0631\u06cc\u0642 API.<\/p>\n\n<p>\u06f1\u06f8. \u0646\u06af\u0647\u062f\u0627\u0631\u06cc \u062f\u0627\u062f\u0647: \u0631\u0648\u06cc\u062f\u0627\u062f \u0632\u0645\u0627\u0646\u200c\u0628\u0646\u062f\u06cc\u200c\u0634\u062f\u0647\u0654 \u0631\u0648\u0632\u0627\u0646\u0647\u061b \u062d\u0630\u0641 \u062f\u0627\u0626\u0645\u06cc \u0631\u06a9\u0648\u0631\u062f\u0647\u0627\u06cc <code>deleted_at<\/code> \u0642\u062f\u06cc\u0645\u06cc\u200c\u062a\u0631 \u0627\u0632 \u06f3\u06f0 \u0631\u0648\u0632 (\u062c\u0647\u062a\u200c\u06af\u06cc\u0631\u06cc GDPR).<\/p>\n\n<p>\u06f1\u06f9. \u0686\u0646\u062f \u0631\u0627\u0628\u0637: \u0648\u06cc\u062c\u062a \u0634\u0646\u0627\u0648\u0631 \u0633\u0627\u06cc\u062a\u061b \u0634\u0648\u0631\u062a\u200c\u06a9\u062f <code>[team_messenger_web_chat]<\/code> \u0628\u0627 \u0645\u062d\u062a\u0648\u0627\u06cc \u0642\u0627\u0628\u0644 \u062a\u0646\u0638\u06cc\u0645 \u0628\u0631\u0627\u06cc \u0645\u0647\u0645\u0627\u0646\u061b \u0635\u0641\u062d\u0647\u0654 \u067e\u06cc\u0627\u0645\u200c\u0631\u0633\u0627\u0646 \u0627\u062f\u0645\u06cc\u0646\u061b \u062f\u06a9\u0645\u0647\u0654 \u0634\u0646\u0627\u0648\u0631 \u0627\u062e\u062a\u06cc\u0627\u0631\u06cc \u062f\u0631 \u06a9\u0644 wp-admin (\u062a\u0646\u0638\u06cc\u0645 \u0633\u0631\u0627\u0633\u0631\u06cc + \u0627\u062d\u062a\u0631\u0627\u0645 \u0628\u0647 \u062e\u0627\u0645\u0648\u0634 \u0628\u0648\u062f\u0646 \u0686\u062a \u0627\u062f\u0645\u06cc\u0646 \u0628\u0631\u0627\u06cc \u06a9\u0627\u0631\u0628\u0631)\u061b \u0622\u06cc\u062a\u0645 \u0646\u0648\u0627\u0631 \u0627\u0628\u0632\u0627\u0631\u061b \u062f\u0648 \u0648\u06cc\u062c\u062a \u062f\u0627\u0634\u0628\u0648\u0631\u062f.<\/p>\n\n<p>\u06f2\u06f0. \u0634\u062e\u0635\u06cc\u200c\u0633\u0627\u0632\u06cc \u062f\u0631 \u062a\u0646\u0638\u06cc\u0645\u0627\u062a: \u0631\u0646\u06af \u0627\u0635\u0644\u06cc\u060c \u06af\u0648\u0634\u0647\u0654 \u0648\u06cc\u062c\u062a\u060c \u0645\u062a\u0646 \u062e\u0648\u0634\u200c\u0622\u0645\u062f\u060c \u0645\u062d\u062a\u0648\u0627\u06cc \u0645\u0647\u0645\u0627\u0646 \u0634\u0648\u0631\u062a\u200c\u06a9\u062f\u060c \u0648 \u0631\u0648\u0634\u0646\/\u062e\u0627\u0645\u0648\u0634 \u0628\u0648\u062f\u0646 \u067e\u06cc\u0627\u0645\u200c\u0631\u0633\u0627\u0646 \u062f\u0631 \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0627\u062a \u067e\u0646\u0644.<\/p>\n\n<p>\u06f2\u06f1. \u062a\u0631\u062c\u06cc\u062d\u0627\u062a \u06a9\u0627\u0631\u0628\u0631\u06cc \u062f\u0631 \u067e\u0631\u0648\u0641\u0627\u06cc\u0644: \u067e\u0646\u0647\u0627\u0646 \u06a9\u0631\u062f\u0646 \u0686\u062a \u0633\u0627\u06cc\u062a \u0648\/\u06cc\u0627 \u0686\u062a wp-admin (\u0634\u0646\u0627\u0648\u0631\u060c \u0635\u0641\u062d\u0647\u0654 \u067e\u06cc\u0627\u0645\u200c\u0631\u0633\u0627\u0646\u060c \u0646\u0648\u0627\u0631 \u0627\u0628\u0632\u0627\u0631\u060c \u0648\u06cc\u062c\u062a\u200c\u0647\u0627). \u0631\u0648\u06cc \u0635\u0641\u062d\u0647\u0654 \u0634\u0648\u0631\u062a\u200c\u06a9\u062f \u062f\u0631 \u0635\u0648\u0631\u062a \u062e\u0627\u0645\u0648\u0634 \u0628\u0648\u062f\u0646\u060c \u0627\u0639\u0644\u0627\u0646 \u06a9\u0648\u062a\u0627\u0647.<\/p>\n\n<p>\u06f2\u06f2. \u0645\u062d\u0627\u0641\u0638\u062a \u062f\u0631 \u0628\u0631\u0627\u0628\u0631 \u0633\u0648\u0621\u0627\u0633\u062a\u0641\u0627\u062f\u0647: \u0645\u062d\u062f\u0648\u062f\u06cc\u062a \u0646\u0631\u062e \u0628\u0631\u0627\u06cc \u0627\u0631\u0633\u0627\u0644 \u067e\u06cc\u0627\u0645 \u0648 \u0627\u06cc\u062c\u0627\u062f \u06af\u0631\u0648\u0647.<\/p>\n\n<p>\u06f2\u06f3. \u0686\u0646\u062f\u0632\u0628\u0627\u0646\u0647: \u062f\u0627\u0645\u0646\u0647\u0654 <code>team-messenger<\/code>\u061b \u067e\u0648\u0634\u0647\u0654 <code>languages<\/code> \u0634\u0627\u0645\u0644 fa_IR \u0648 POT\u061b \u0632\u0628\u0627\u0646 \u067e\u06cc\u0634\u200c\u0641\u0631\u0636 \u0645\u062a\u0646 \u0627\u0646\u06af\u0644\u06cc\u0633\u06cc \u0627\u0633\u062a.<\/p>\n\n<!--section=installation-->\n<ol>\n<li>Upload the plugin files to <code>\/wp-content\/plugins\/team-messenger<\/code>, or install the ZIP from Plugins &gt; Add New.<\/li>\n<li>Activate the plugin through the <strong>Plugins<\/strong> screen.<\/li>\n<li>Configure options under the plugin\u2019s <strong>Settings<\/strong> submenu if needed.<\/li>\n<\/ol>\n\n<!--section=faq-->\n<dl>\n<dt id=\"does%20this%20work%20for%20guests%3F\"><h3>Does this work for guests?<\/h3><\/dt>\n<dd><p>The chat UI is for logged-in users. Shortcodes can show configurable fallback content for visitors.<\/p><\/dd>\n<dt id=\"where%20are%20translations%3F\"><h3>Where are translations?<\/h3><\/dt>\n<dd><p>Language packs are loaded automatically when hosted on WordPress.org. The <code>languages<\/code> folder ships <code>.pot<\/code> and community <code>.po<\/code> files.<\/p><\/dd>\n<dt id=\"%D8%A2%DB%8C%D8%A7%20%D8%A8%D8%B1%D8%A7%DB%8C%20%D9%85%D9%87%D9%85%D8%A7%D9%86%E2%80%8C%D9%87%D8%A7%20%DA%86%D8%AA%20%D9%81%D8%B9%D8%A7%D9%84%20%D8%A7%D8%B3%D8%AA%D8%9F\"><h3>\u0622\u06cc\u0627 \u0628\u0631\u0627\u06cc \u0645\u0647\u0645\u0627\u0646\u200c\u0647\u0627 \u0686\u062a \u0641\u0639\u0627\u0644 \u0627\u0633\u062a\u061f<\/h3><\/dt>\n<dd><p>\u0631\u0627\u0628\u0637 \u0686\u062a \u0628\u0631\u0627\u06cc \u06a9\u0627\u0631\u0628\u0631\u0627\u0646 \u0648\u0627\u0631\u062f\u0634\u062f\u0647 \u0627\u0633\u062a. \u062f\u0631 \u0634\u0648\u0631\u062a\u200c\u06a9\u062f \u0645\u06cc\u200c\u062a\u0648\u0627\u0646 \u0645\u062d\u062a\u0648\u0627\u06cc \u062c\u0627\u06cc\u06af\u0632\u06cc\u0646 \u0628\u0631\u0627\u06cc \u0628\u0627\u0632\u062f\u06cc\u062f\u06a9\u0646\u0646\u062f\u06af\u0627\u0646 \u062a\u0646\u0638\u06cc\u0645 \u06a9\u0631\u062f.<\/p><\/dd>\n<dt id=\"%D8%AA%D8%B1%D8%AC%D9%85%D9%87%E2%80%8C%D9%87%D8%A7%20%DA%A9%D8%AC%D8%A7%D8%B3%D8%AA%D8%9F\"><h3>\u062a\u0631\u062c\u0645\u0647\u200c\u0647\u0627 \u06a9\u062c\u0627\u0633\u062a\u061f<\/h3><\/dt>\n<dd><p>\u0641\u0627\u06cc\u0644\u200c\u0647\u0627\u06cc \u062a\u0631\u062c\u0645\u0647 \u062f\u0631 \u067e\u0648\u0634\u0647\u0654 <code>languages<\/code> \u0642\u0631\u0627\u0631 \u062f\u0627\u0631\u0646\u062f\u061b \u0628\u0631\u0627\u06cc fa_IR \u0646\u06cc\u0632 \u067e\u0634\u062a\u06cc\u0628\u0627\u0646\u06cc \u062f\u0631 \u0646\u0638\u0631 \u06af\u0631\u0641\u062a\u0647 \u0634\u062f\u0647 \u0627\u0633\u062a.<\/p><\/dd>\n\n<\/dl>\n\n<!--section=changelog-->\n<h4>1.0.8<\/h4>\n\n<ul>\n<li>Security: Replaced the generic <code>check_permission<\/code> (logged-in only) on the <code>\/media\/download\/{file}<\/code> REST endpoint with a dedicated <code>check_media_download_permission<\/code> callback that performs full ownership verification before serving any file. The check confirms the requesting user is either: (a) the sender or receiver of a direct message containing the file, (b) a member of a group whose group message contains the file, or (c) a member of the group whose avatar is that file. Site administrators (<code>manage_options<\/code>) retain access for moderation purposes. Non-matching requests receive a 403 response.<\/li>\n<\/ul>\n\n<h4>1.0.7<\/h4>\n\n<ul>\n<li>Fixed: Plugin URI updated to the correct public documentation page.<\/li>\n<li>Fixed: Added plugin owner (syeedalireza) to the Contributors list in readme.txt.<\/li>\n<li>Fixed: Removed remote CDN dependency for the Vazirmatn font (jsDelivr); all font files (woff2) are now bundled locally inside the plugin.<\/li>\n<li>Fixed: Removed inline <code>&lt;style&gt;<\/code> block from the admin global chat partial; critical FAB styles are now output via <code>wp_add_inline_style()<\/code> attached to the enqueued stylesheet handle.<\/li>\n<li>Fixed: Removed <code>require_once wp-admin\/includes\/media.php<\/code> that was included without any subsequent call to a function from that file, violating the core-file loading exception rule.<\/li>\n<li>Fixed: Shortcode callback <code>render_web_chat_shortcode<\/code> now wraps the guest fallback output in <code>wp_kses_post()<\/code> after <code>do_shortcode()<\/code> execution to ensure all returned markup is properly escaped.<\/li>\n<li>Verified: Plugin Check (PCP) reports no errors or warnings on a clean WordPress installation with WP_DEBUG enabled.<\/li>\n<\/ul>\n\n<h4>1.0.6<\/h4>\n\n<ul>\n<li>Maintenance and Plugin Check compliance improvements.<\/li>\n<\/ul>","raw_excerpt":"Real-time team chat for logged-in users with optional E2E, groups, notifications, and admin UI.","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin\/309830","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin"}],"about":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/types\/plugin"}],"replies":[{"embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/comments?post=309830"}],"author":[{"embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wporg\/v1\/users\/syeedalireza"}],"wp:attachment":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/media?parent=309830"}],"wp:term":[{"taxonomy":"plugin_section","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_section?post=309830"},{"taxonomy":"plugin_tags","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_tags?post=309830"},{"taxonomy":"plugin_category","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_category?post=309830"},{"taxonomy":"plugin_contributors","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_contributors?post=309830"},{"taxonomy":"plugin_business_model","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_business_model?post=309830"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}