Description
TalkDock adds a floating WhatsApp button to your site in under two minutes. Visitors tap it and WhatsApp opens straight to your number — no forms, no redirects, no friction.
One settings panel covers everything. No accounts, no code, nothing to configure outside WordPress.
What TalkDock does
- Floating chat button — appears on every page; visitors tap it and WhatsApp opens directly to your number.
- Full color control — solid colors or gradients via a built-in picker; matches any brand palette.
- Flexible positioning — left or right, with fine-grained offset control.
- Pre-filled welcome message — visitors arrive with a conversation starter already typed.
- Animations & visibility rules — choose bounce, pulse, shake, or none; show to all visitors, logged-in users, or guests only; hide on mobile with one toggle.
- Shortcode support — embed
[talkdock_button]anywhere in posts or pages. - Live preview & clean uninstall — see changes before saving; plugin removes its own data on uninstall.
Upgrade to TalkDock Pro
The free plugin covers everything you need to get a WhatsApp button live. TalkDock Pro is the add-on for teams that want more control, more visibility, and more conversions.
Free
- Floating chat button — all pages, all devices
- Full color & gradient control with live preview
- Flexible position and animation presets
- Pre-filled welcome message
- Visitor targeting by login state and device
- Shortcode
[talkdock_button]for inline embeds - Accessibility label and clean uninstall
Pro — everything above, plus:
- Page-level targeting — show or hide the button by page ID, URL pattern, post type, or WooCommerce product
- Multiple agents & departments — add unlimited agents with names, avatars, titles, and individual WhatsApp links; visitors pick the right person
- Business hours & offline routing — set open/close windows per day; outside hours the widget auto-switches to a lead capture form
- Offline leads inbox — missed enquiries saved server-side, reviewable in-dashboard, exportable as CSV
- Click analytics & conversion tracking — day-by-day click chart per agent, 7/30/90-day windows, Google Analytics and Meta Pixel event firing, CSV export
- Greeting bubbles & extra button styles — pop-up greeting animations, agent typing indicators, and additional button presets
- Inline Gutenberg block — drop a fully-styled “Chat with us” CTA anywhere in the block editor
About WhatsApp
TalkDock is not affiliated with WhatsApp or Meta. The button opens a standard wa.me link — identical to any hand-coded WhatsApp link. The plugin never contacts WhatsApp’s servers on your behalf.
Privacy & External Services
TalkDock transmits nothing in normal operation — no tracking, no telemetry, no background requests. The floating button is a plain wa.me anchor tag; clicking it opens WhatsApp in the visitor’s browser and nothing else. The only outbound connection is the optional Report a Bug form, fired solely when an administrator clicks Send.
Data sent only when a bug report is submitted:
- Report subject and message
- Optional reply-to email address (only if you type one)
- Up to three screenshot attachments (validated server-side; never stored in your media library)
- Optional diagnostic info — opt-out, shown to you before sending: plugin, WordPress, PHP, and MySQL versions; active theme; locale; multisite flag; PHP memory limit
- Never auto-collected: site URL, admin email, license keys, user list, active plugin list, or any visitor data
- A local copy is saved in
tlkd_feedback_log(last 50 entries; removed on uninstall)
External service used:
- Service: Markas Studio Bug Report Receiver
- Purpose: Deliver administrator-submitted bug reports for support investigation. Data is sent only after clicking Send — never automatically.
- Terms of Use · Privacy Policy
WhatsApp wa.me links are standard browser anchor tags. The plugin makes no server-side requests to WhatsApp or Meta.
Screenshots

General tab — enter your WhatsApp link, toggle the widget on or off, and set the accessibility label. Live preview updates on the right. 
Design & Position tab — pick gradient colors, set horizontal alignment, adjust side and bottom distance, and choose a button animation. 
Message tab — enable and configure a pre-filled message so visitors land with a conversation starter already typed. 
Visibility tab — control who sees the button (all visitors, logged-in only, or guests) and hide it on mobile with one toggle. 
Pro Features tab (free plugin) — overview of the TalkDock Pro add-on with feature cards covering business hours, multi-agent, page targeting, analytics, greeting bubbles, and inline embeds. 
Pro License tab — active Pro workspace showing license details, plan, validity, and the full list of enabled Pro features. 
General tab with Pro active — the full Pro tab bar unlocked: Business Hours, Offline Leads, Agents, Targeting, Analytics, Shortcode & Block, and Pro License. 
Design tab with Pro active — advanced animation options including Pro-exclusive motion styles; button preview reflects multi-agent bubble rendering. 
Message tab with Pro active — agent-aware prefill routing; assign prefilled messages to specific agents for personalised touchpoints. 
Visibility tab with Pro active — full visibility and targeting panel with device, page ID, URL pattern, and agent-specific display logic. 
Business Hours tab (Pro) — schedule-aware availability engine with per-day open/close windows, timezone selection, and automatic offline routing. 
Agents tab (Pro) — multiple agents and departments panel; assign names, titles, avatars, departments, and individual WhatsApp links with drag-to-prioritise ordering. 
Offline Leads tab (Pro) — captured offline lead messages with CSV export; visitor enquiries submitted outside business hours are stored and ready to review. 
Targeting tab (Pro) — page-level targeting with include/exclude rules by post ID and URL pattern; deploy the button on checkout pages, hide it everywhere else. 
Shortcode & Block tab (Pro) — inline embed tools showing the shortcode with inline and label variants plus a native Gutenberg block, with a live preview of the styled CTA. 
Analytics tab (Pro) — click analytics dashboard with 7/30/90-day windows, a day-by-day bar chart, per-agent breakdown table, and CSV export.
Installation
- Upload the plugin ZIP through Plugins Add New Upload Plugin, or upload the plugin folder to
/wp-content/plugins/. - Activate the plugin via the Plugins screen.
- Go to TalkDock in the admin sidebar.
- Enter your WhatsApp link in the format
https://wa.me/15551234567and customize colors and position. - Click Save Changes. The button will appear on your site.
FAQ
-
How do I find my WhatsApp link?
-
Use the format
https://wa.me/<country-code><phone-number>— for examplehttps://wa.me/15551234567. No plus sign, no spaces. -
Will this work with my caching plugin?
-
Yes. TalkDock enqueues static assets and a sanitized generated stylesheet, so the button renders correctly regardless of page caching.
-
The free plugin supports targeting by login state and screen size (hide on mobile). Per-page, per-product, and URL-pattern targeting is available in TalkDock Pro.
-
Will I lose my settings if I deactivate?
-
No. Deactivation leaves settings intact. Data is removed only when you delete the plugin — and even then you can opt in to keep it.
-
Where do I get support?
-
Free support is available through the WordPress.org support forum for this plugin.
Reviews
There are no reviews for this plugin.
Contributors & Developers
“TalkDock — Floating Chat Button” is open source software. The following people have contributed to this plugin.
ContributorsTranslate “TalkDock — Floating Chat Button” into your language.
Interested in development?
Browse the code, check out the SVN repository, or subscribe to the development log by RSS.
Changelog
1.1.6
- Refreshed plugin description copy for clarity and readability.
1.1.5
- Resolved the Plugin Check nonce-verification warning in settings checkbox payload handling.
- Reconfirmed AJAX no-refresh settings saving, persisted-value verification, and POST fallback.
- Maintained save status feedback and live-preview refresh after successful saves.
1.1.2
- Added the TalkDock Pro integration hooks while keeping all free features fully functional without the add-on.
- Hardened settings saves, feedback uploads, frontend asset enqueues, and generated CSS output for WordPress.org review.
- Refined the admin UI, responsive tab layout, and shadow-free design system.
- Preserved the existing privacy posture: no background telemetry and no visitor data sent by the free plugin.
1.0.9
- Fixed WordPress.org review blockers: all JavaScript is enqueued through WordPress, the text domain is consistently
talkdockacross plugin headers, gettext calls, and the POT template, external service disclosure is explicit, Report-a-Bug uploads are sanitized and validated at the boundary, and frontend design CSS is generated from validated values instead of printed as raw inline CSS. - Removed the remote Google Fonts admin dependency and uses the system font stack instead.
- Cleaned admin/front-end markup output and tightened late escaping for dynamic values.
- Normalized Markas Studio public links under
https://studio.markashosting.com/plugins/talkdock/, including docs, support, TalkDock Pro, Terms of Use, and Privacy Policy permalinks. - Removed the optional author homepage header because the plugin-specific URL is intentionally used as the Plugin URI; this avoids duplicate URL validation errors during WordPress.org submission.
1.0.8
- FIX (Report-a-Bug delivery): the modal showed “Thanks — your report has been recorded” even when the cross-site bug-report receiver returned HTTP 413 (payload too large). Two underlying issues: (a) the dispatcher treated any non-WP_Error response from
wp_remote_postas success, so a 413 / 429 / 500 from the receiver slipped through asok = true; (b) the receiver’s body cap was 1 MB while the plugin permits up to 3 × 5 MB images, so a typical multi-screenshot bug report exceeded the cap. The dispatcher now requires an actual 2xx status before reporting success; on non-2xx the modal shows an honest “Saved locally — receiver was unreachable” warning and leaves itself open so the user can resend. The receiver-side cap (in the Markas Studio dashboard’s plugin-bug intake) has been raised to 12 MB to match the plugin’s spec’d wire budget with comfortable headroom. - FIX (response parsing — receiver entry_id): the cross-site receiver responds with
{ success: true, id: <post_id>, message: '...' }on a successful intake, whereidis the reference number of the recorded report on the receiver side. The previous dispatcher discarded the body entirely on 2xx and returned only{ ok, status }upstream, so the receiver’s reference number was lost between layers. The dispatcher now decodes the response body, extracts theidfield (acceptingentry_idas a forward-compat alias), and propagates it asremote_entry_idthrough the dispatch result local log row AJAX response modal history pill. The user-facing success message now includes the receiver-assigned reference (“Thanks — your report has been recorded (ref #847).”), and the Previous Reports panel renders sent rows as “Sent · #847” so the user has a number to cite in any follow-up. Pre-1.0.8 log entries that lack the field render as “Sent” with no reference, gracefully — no data migration required. - NEW (Smart auto-resize): screenshots are now optimized client-side before submission. Images larger than the per-image target are scaled to a 1920px longest edge and re-encoded as JPEG with progressive quality steps (0.85 0.72 0.6) until they fit. A typical 5 MB retina screenshot lands at ~400–600 KB without visible quality loss, and the 413 budget becomes practically unreachable from the UI.
- NEW (Paste-from-clipboard): you can now paste a screenshot directly into the open modal with Cmd / Ctrl + V. Captured images run through the same auto-resize pipeline. A timestamped filename is synthesized so multiple pastes don’t collide. Text pastes into the subject / message inputs are left untouched.
- NEW (Previous reports panel): an opt-in “Show previous reports” disclosure inside the modal lists the most recent submissions from this site with their delivery status (
Sent/Local only/Not delivered). Reads from the existing bounded local log; no new options are created. Lazy-loaded on first expand. - FIX (wp_options bloat): the local
tlkd_feedback_logoption no longer stores the base64-encoded attachment binary. With 50 entries × up to 15 MB raw attachments, the option row could theoretically reach ~750 MB and slow every admin page load. The log now stores per-attachment metadata only (name, MIME, byte count); the audit trail is preserved, the bloat hazard is gone. - FIX (privacy / wire format): the dispatcher’s outbound
User-Agentno longer includeshome_url(). The readme privacy section already promised the plugin never auto-attaches your site URL, but the previous headerTalkDock/1.0.7; <home_url>shipped it on every dispatch. The receiver-side dashboard derives the source host from theOrigin/Refererheader (unchanged), so theUser-Agentis now plainTalkDock/1.0.8. - HARDENING (PHPCS hygiene): the
$_FILESsuperglobal is read in three places insideprocess_attachments()(existence check, raw-array capture, per-file loop). The previous build used an inlinephpcs:ignorethat only covered one line and left the other two flagged. Replaced with a method-scopedphpcs:disable/phpcs:enablepair stacking bothWordPress.Security.NonceVerification.MissingandWordPress.Security.ValidatedSanitizedInput.InputNotSanitized. Each suppression carries a one-line justification naming the mitigation. No behavioural change. - HARDENING (link-rel sweep): every
target="_blank"link in the plugin’s admin views now usesrel="noopener noreferrer"(wasrel="noopener").noopenerneutralizes reverse-tabnabbing;noreferreradditionally suppresses theRefererheader so the destination site does not learn whichwp-admin/admin.php?page=…page the click came from. - No change to the AJAX action names, the nonce, the option keys, the validation rules, the JSON payload schema, the diagnostic block, or what is opt-in vs opt-out. The 5 MB per-image cap and 3-image cap are unchanged. The set of fields transmitted is unchanged — except that the outbound
User-Agentheader no longer containshome_url(), per the readme’s privacy guarantee.
1.0.7
- Polished the Report-a-Bug modal. The submit button now shows an inline spinner during dispatch and a brief checkmark on success instead of swapping its text; the form is disabled while the request is in flight so the loading state is clearly bounded.
- Fixed a desktop layout regression where the modal could overflow the viewport once the “Sending…” status banner appeared, clipping the footer off the bottom of the screen. The dialog wrapping form body now form a proper flex column, so the body scrolls internally instead of pushing the dialog past its
max-heightcap. The status banner is also auto-scrolled into view when it appears. The dialog now also offsets for the WordPress admin bar (32px / 46px) so it never sits beneath it on desktop. - Replaced the fragile
backdrop-filter: blur(8px)scrim with a solid dim (rgba(15, 16, 20, 0.62)) that renders deterministically regardless of WP admin chrome stacking contexts. The previous blur approach caused “ghost” rendering where tabs and buttons bled through the backdrop. Removed the associated defensiveisolation: isolateandz-index: 0hacks that were only propping up the broken filter. - Switched the admin CSS and JS enqueue from a static plugin-version cache key to a
filemtime()-based version. Any byte-level change toadmin/css/admin.cssoradmin/js/admin.jsnow forces an immediate browser refetch even when the plugin version has not been bumped. The headline plugin version stays visible in?ver=…because the new format isTLKD_VERSION.MTIMEwith a graceful fallback to plainTLKD_VERSIONif the file cannot be stat’d. - Refined the modal visuals toward a minimalist, system-style aesthetic: clean solid-dim backdrop, tighter typography, larger corner radius on desktop, and a primary-indigo Send action that matches the rest of the admin brand instead of the accent terracotta.
- Mobile rendering hardened: switched the full-screen breakpoint to
100dvh(fixes iOS Safari toolbar overlap), added safe-area-inset padding for notched devices, and reduced the body padding so all fields stay reachable on narrow screens. - Accessibility: animations honor
prefers-reduced-motion; the spinner is hidden from assistive tech; the live status region continues to announce send/success/error. - No change to the AJAX endpoint, validation rules, payload shape, dispatcher behavior, or privacy posture.
1.0.5
- Suppressed five false-positive Plugin Check warnings in
TLKD_Feedback. No behavioural change.
1.0.4
- Added an optional “Report a Bug” button on the settings page sidebar. Opens a modal that accepts a subject, message, optional reply-to email, and up to three image attachments.
- The feedback flow is transparent: nothing is transmitted until the administrator clicks Send. Diagnostic environment info is opt-out and the full payload is shown to the user before submission.
- Submissions are recorded locally in a bounded log (
tlkd_feedback_log, 50 most recent entries, removed on uninstall unless data is preserved). - New
talkdock_feedback_payloadandtalkdock_feedback_dispatchfilters let extensions modify the payload or replace the default dispatcher. - Added a
== Privacy ==section to this readme describing exactly what the Report-a-Bug flow transmits.
1.0.3
- Renamed plugin to “TalkDock — Floating Chat Button” to comply with WordPress.org Plugin Check trademark rules.
- Updated admin hero subtitle to match the new name.
- No functional changes.
1.0.2
- Rebranded from the previous internal name to “TalkDock”.
- Reworked description and admin copy to be factual rather than promotional.
- Removed the red upgrade link from the plugins list row.
- Added an explicit non-affiliation notice regarding WhatsApp.
- Shortcode renamed to
[talkdock_button].
1.0.0
- First release.
- Floating chat button with color, position, and animation controls.
- Prefilled message support.
- Visibility rules (login state, hide on mobile).
- Accessibility-first markup.
- Inline shortcode for placing buttons inside content.
- Auto-migration from the legacy
custom_wa_*standalone snippet.
