=== Anchor.Social ===
Contributors: zeeker
Tags: comments, reviews, community, chat, polls
Requires at least: 6.0
Tested up to: 7.0
Requires PHP: 7.4
Stable tag: 0.5.0
License: GPLv2 or later
License URI: https://www.gnu.org/licenses/gpl-2.0.html

Add configurable Anchor.Social discussions, reviews, questions, polls, chat, and community feeds to WordPress.

== Description ==

Anchor.Social adds the actual hosted Anchor.Social runtime to WordPress. Choose a starting preset: Group Chat, MOD Chat, Support Forum, Comments, Product Reviews, Product Q&A, Community Feed, or Polls.

Setup starts by naming the community, choosing an authoring preset, choosing its WordPress placement, and choosing its connection mode. Embed only is enabled only after an administrator explicitly checks availability and Zeeker reports complete content-isolation readiness; otherwise Connected to Zeeker stays selected. Starting placements include the Anchor floating button, below articles, on WooCommerce products, or a fixed Anchor Community block/shortcode. Chat recommends the floating launcher but can also be published as a fixed Element. After setup, Customize can switch any Element to an Anchor floating button, custom host button/selector, fixed inline mount, or full-screen host action. The Comments preset then offers an optional second stage for migrating published posts and approved comments. The plugin provisions an unlisted, ownerless community and publishes the Embed automatically. It does not assign a temporary user or owner. You can sign up later to connect that already-live Embed, become its owner, and unlock moderation, full Embed configuration, analytics, stats, SSO, and White-label tools.

The legacy Element kind is saved only as private, backwards-compatible authoring metadata. It is read-only on legacy blocks and is never runtime authority. Every preset combines existing community capabilities: standard posts and replies, configured post types, community settings, and existing chat. The published Widget remains authoritative for the Social surface, optional header, border, scrolling, access, and identity. WordPress placement cannot invent or replace those settings.

= Highlights =

* No code or API keys.
* No Zeeker account required to go live.
* Asynchronous, non-render-blocking loader.
* Guided community naming, starting-preset selection, and contextual placement.
* Group Chat, MOD Chat, Support Forum, Comments, Product Reviews, Product Q&A, Community Feed, and Polls.
* Automatic article placement for Comments and Polls.
* Automatic WooCommerce product placement and stable product context for Reviews and Product Q&A.
* A dynamic Anchor Community block and `[zeeker_element]` shortcode for manual placement.
* Four published placements for every Element: Anchor floating button, custom host trigger, fixed inline, or full screen. Chat uses the launcher as its recommended default.
* Support Forum starts as a full-page question feed with native community search and an Anchor-managed support information panel instead of the standard community card.
* Product Reviews accepts only Review as a root contribution, keeps nested replies ordinary, and can use Zeeker's native rating and AI summaries.
* Resumable migration of published posts into attributed, deduplicated Zeeker source posts.
* Approved WordPress comments become normal Zeeker replies with public attribution, nesting, permalinks, and original dates.
* Connect a published Embed you already created by pasting its Widget ID.
* Server-authoritative connection, viewing, participation, login, and theme policy.
* Capability-gated Embed-only setup with a Connected default and server-authoritative readiness status.
* Customize controls Social feature visibility, Embed header and border, layout, scrolling, responsive presentation, appearance, access, and behavior.
* Distinct dashboard actions for moderation, customization, analytics, stats, SSO, and White-label.
* Pausing the plugin never deletes Social content or conversations.

= External service =

This plugin connects to Anchor.Social, a hosted service required to provide Social surfaces, identity, access control, content, moderation, configuration, and analytics.

Activation and opening the Anchor setup screen do not contact Zeeker. If an administrator selects **Check Embed-only availability** after reading its adjacent disclosure, that explicit action sends one tenant-free GET request to `https://embed.zeeker.com/api/embed/installations/capabilities`. It asks only for the global boolean readiness of Embed-only isolation and guest contribution, is not cached, and sends no site URL, site title, installation identifier, credential, community data, or user data; Zeeker still receives normal HTTPS request metadata. The result controls whether Embed only can be selected, and setup fails closed to Connected to Zeeker if the response is false, missing, malformed, or unavailable.

Before provisioning, an administrator must select an unchecked control accepting the current Publisher, Embed & White-Label Terms. The plugin sends the exact document type, version, locale, title, URL, effective date, content hash, acceptance notice, button label, and UTC acceptance timestamp with the site's public URL, site title, chosen community name, starting-preset label, placement, selected connection mode, WordPress version, locale, plugin version, a random installation identifier, and random authentication secrets. Zeeker keeps server-recorded acceptance evidence tied to the installation. The secrets identify this WordPress installation and protect the dashboard claim and archive-migration flows. After setup, visitors' browsers load the Anchor runtime from `embed.zeeker.com`. Contextual placements process the current canonical URL and normal web request metadata. On WooCommerce product pages, the plugin also provides a stable site/product identifier plus the public product title, permalink, and image so the published Embed can attach Social content to the correct item.

When an administrator explicitly starts post migration, the plugin sends public data from published, non-password-protected posts: title, excerpt, permalink, WordPress post ID, published/modified dates, public author name/slug/avatar/archive URL, categories, tags, and featured-image URL/alt text. WordPress remains canonical and the full article body is not copied.

When an administrator explicitly selects comment migration, the plugin sends approved public comment text, comment/post IDs, parent comment ID, permalink, date, public display name, public avatar URL, and public profile URL. Email addresses and IP addresses are never sent. Comment email may be used locally only to create an irreversible author key.

Service provider: Zeeker
Privacy Policy: https://legal.zeeker.com/privacy
Publisher, Embed & White-Label Terms: https://legal.zeeker.com/publisher-terms

== Installation ==

1. Install and activate **Anchor.Social**.
2. Name the community and choose a starting preset and placement. If needed, explicitly check Embed-only availability; otherwise Connected to Zeeker remains selected.
3. Choose the enabled connection mode, then review and accept the current Publisher, Embed & White-Label Terms.
4. For the Comments preset, choose whether to migrate published posts and approved comments, or skip for now.

That's it. Your Anchor community is live from the chosen starting preset. Creating a Zeeker account is optional until you want dashboard access.

== Frequently Asked Questions ==

= Do I need a Zeeker account? =

No. The site receives an unclaimed Zeeker community when you finish the first setup step. Any dashboard action later opens signup and securely attaches the widget, conversations, and imports that are already live.

If you already have a Zeeker account with a password, choose **Use password instead** after entering your phone number or email. Successful sign-in claims this existing community and embed automatically and makes that account the community owner with full admin access.

= Can I migrate my existing posts? =

Yes. Choose posts during setup or run Migrate archive to Anchor later. The importer creates normal third-party posts with provider `wordpress`, canonical permalinks, original attribution, images, taxonomy, and timestamps. Re-running it refreshes existing records instead of duplicating them.

= Can I migrate my existing comments? =

Yes. Approved comments become normal replies beneath their imported article, retaining public author attribution, nesting, permalink, and original date. WordPress comments are not modified. Email addresses and IP addresses are never sent to Zeeker.

= I already created an Anchor Community. Can I use it? =

Yes. Expand Already created an embed in Anchor.Social?, paste its full published Widget ID, and connect it. The plugin reads and preserves the published Social surface, theme, container, scrolling, and identity policy. Because Widget IDs are public embed identifiers, this path installs the Embed but does not transfer ownership or authorize post imports.

= How do I place an Element in a page or template? =

Choose fixed manual placement, then insert the **Anchor Community** block. Classic Editor, template, and page-builder users can use `[zeeker_element]`. Any published fixed Element—including Group Chat and MOD Chat—can use this mount. Floating, custom-trigger, and full-screen configurations are loaded by the plugin instead. The current release intentionally renders one Anchor runtime per page; a second placement does not create a second runtime.

New placements render a neutral mount without another WordPress heading or product frame. The published Embed owns its optional top header, border and radius, clipping, and scroll behavior. Existing pages may keep using `[zeeker_element show_heading="true"]` for the legacy host heading, but the default is now off. The legacy `element` attribute remains accepted and cannot override the published Widget.

A Widget whose generic configuration is `floating` or `trigger` never mounts as a fixed block or shortcode surface. A published `fixed` Group Chat or MOD Chat configuration does. The historical preset label does not make that decision.

= How do Chat Elements appear? =

Group Chat and MOD Chat start with a focused Anchor floating action on desktop and a responsive tray action on mobile. Customize can instead bind Chat to your own button, mount the existing Chat surface as a fixed Element, or open it full screen. WordPress preserves that published choice.

= How do Reviews and Product Q&A identify a WooCommerce product? =

The plugin supplies a stable site/product identity plus the public product title, permalink, and image. The published Widget, not editable page markup, decides which existing Social post types and settings are shown.

= How does login work? =

Each published Embed uses the connection, viewing, participation, sign-in method, sign-in timing, and theme saved in its Anchor configuration. Community SSO provider setup remains in Admin Center. The plugin never stores an SSO signing secret. WordPress enables Embed only only after the administrator explicitly checks and the deployment reports the exact boolean `embedOnlyIsolationAvailable: true`, rechecks that capability on consented submission, sends the selected network mode during provisioning, and displays the mode and readiness returned by later server refreshes. False, unknown, or malformed readiness keeps setup Connected and disabled. Named guest participation is enabled only when the same explicit check returns `guestContributionAvailable: true` and Embed only is selected. Every guest supplies a display name and remains scoped to that published Embed; signed-in Zeeker users can still participate.

= What can I change after setup? =

Customize in Anchor.Social controls existing Social feature visibility, Anchor floating/custom-trigger/fixed/full-screen placement, desktop and mobile presentation, optional top header, generic container border, scrolling, appearance, Auto/Light/Dark theme, connection, viewing, participation, login behavior, and the separate outside-access boundary. Embed only controls server content isolation and is always **Strictly containerized**; Connected embeds may instead allow Profiles only or permitted Social destinations. These remain advanced published-Embed choices rather than a duplicate WordPress field. SSO and White-label are separate dashboard tools and may require the corresponding Zeeker feature entitlement.

= Does activation send data to Zeeker? =

No. Activation and opening the setup screen stay local. The optional availability request occurs only when an administrator selects the separately disclosed, nonce-protected **Check Embed-only availability** button. Site-specific provisioning waits until the administrator submits the community setup form, which shows what will be shared and requires an unchecked Publisher, Embed & White-Label Terms acceptance control.

= What happens when the Publisher, Embed & White-Label Terms change? =

The existing widget remains live. The plugin asks a site administrator to accept the new material version before the next claim, import, connection, resume, or display mutation.

= Will this replace WordPress comments? =

No. Zeeker adds a complementary social layer and leaves native WordPress comments untouched. Comment migration copies approved comments into the new discussion only when an administrator opts in.

= What happens when I pause or deactivate the plugin? =

The loader stops appearing. Conversations stored by Zeeker are not deleted and return when the same installation is resumed.

Resume only re-enables the existing widget. It does not repeat setup, return to the migration step, or reset migration progress.

= Where can I get help? =

Use the Docs and Support community links in the plugin header. The public WordPress Support community is at `https://zeeker.com/z/10000000-0000-0000-0000-000000000110`. Never share passwords, installation secrets, or claim links in a support post.

= Can developers control placement? =

Yes. Use the Anchor Community block or `[zeeker_element]` shortcode for explicit placement. Developers can also use the `zeeker_social_should_load` filter to return `true` or `false` for the current request.

== Changelog ==

= 0.5.0 =
* Introduce Anchor.Social branding in the plugin menu, community block, admin screens, and public headings.
* Use a warm, flat visual theme with keyboard focus outlines.
* Preserve all existing plugin slugs, saved settings, blocks, shortcodes, installation ownership, and update compatibility.

= 0.4.8 =
* Add an optional visible [zeeker_discussion_snapshot] section for contextual floating and host-triggered discussions.
* Keep public reply and author links on canonical zeeker.com destinations and bound snapshot response size.

= 0.4.7 =

* Use the shared rectangular chat outline in WordPress menus, comments controls, previews, and the block editor.

= 0.4.6 =

* Use zeeker.com service endpoints, documentation, and support links.
* Preserve existing publisher acceptance and discussion links during the domain transition.

= 0.4.5 =
* Added a bounded server-rendered snapshot of eligible public, approved discussion replies so publisher pages retain useful discussion content before the interactive Embed loads.
* Kept private, unlisted, authenticated-only, age-restricted, anonymous, deleted, moderated, private-author, and deactivated-author content out of publisher snapshots.
* Corrected the WordPress Support community destination to its canonical Social route.

= 0.4.4 =
* Preserved the published container mode for every Element instead of silently rewriting fixed Chat as a launcher.
* Added fixed Group Chat and MOD Chat support to the neutral block/shortcode mount while keeping the Anchor floating button as the recommended default.
* Added custom-button and full-screen trigger recognition so those published configurations use the plugin loader without emitting a fixed target.
* Added fail-closed named guest setup when Zeeker reports both Embed-only and guest readiness; every guest supplies a display name and remains scoped to the published Embed.

= 0.4.3 =
* Updated the exact Publisher, Embed & White-Label Terms acceptance record for the managed white-label operator model.
* Existing published Elements remain live; publisher mutations require one acceptance of the new material version.

= 0.4.2 =
* Added an explicit, disclosed, tenant-free, no-store readiness check that exposes Embed only only when complete isolation is operational.
* Sent the selected connection mode during provisioning and displayed authoritative connection and readiness status after refresh.
* Moved Group Chat to the same activation-based desktop launcher and mobile tray placement as MOD Chat.
* Reframed Element kinds as backwards-compatible authoring presets made only from existing community capabilities.
* Removed the default WordPress host heading and nested-frame styling from fixed placements.
* Let the published Embed own its optional top header, border and radius, clipping, scrolling, and responsive behavior.
* Kept legacy block and shortcode attributes compatible, including explicit `show_heading="true"`.

= 0.4.1 =
* Made inline Elements flush with the WordPress theme instead of wrapping the complete surface in another rounded, clipped frame.
* Made MOD Chat launcher-only so it opens from a focused floating action on desktop and a bottom tray action on mobile instead of occupying a fixed page block.
* Kept Social composition, identity, access, and login behavior owned by the published Anchor configuration.

= 0.4.0 =
* Added all eight Zeeker starting presets: Group Chat, MOD Chat, Support Forum, Comments, Product Reviews, Product Q&A, Community Feed, and Polls.
* Added preset-aware setup, connected-state summaries, and server-authoritative existing Widget ID detection.
* Added automatic article and WooCommerce product placement with stable contextual metadata.
* Added a dynamic Anchor Community block and `[zeeker_element]` shortcode for manual placement.
* Reflected connection, viewing, participation, sign-in, SSO, and Auto/Light/Dark theme behavior without weakening published policy.
* Added source-contract, package-safety, version-consistency, and exact archive-manifest validation.

= 0.3.9 =
* Requires an explicit, unchecked acceptance of the current Publisher & Embed Terms before provisioning.
* Sends and stores exact versioned publisher-terms evidence, including the content hash and UTC acceptance timestamp.
* Keeps existing widgets live while requiring reacceptance before claim, import, display, resume, or connection mutations.

= 0.3.8 =
* Discovers the lightweight loader in the document head and always executes it asynchronously.
* Keeps compatibility with the exact-handle async fallback on WordPress 6.0–6.2.

= 0.3.7 =
* Loads the Anchor runtime asynchronously so it cannot block document parsing.
* Inlines the sub-1 KB discussion-slot styles beside the below-article embed instead of adding a render-blocking stylesheet request.

= 0.3.6 =
* Stops showing claim links as soon as a plugin-managed WordPress community has already been claimed.
* Displays the connected Zeeker administrator's name and username in the WordPress dashboard.
* Sends claimed installations directly to their existing moderation, customization, analytics, stats, SSO, and white-label tools.

= 0.3.5 =
* Explicitly provisions WordPress communities as unlisted and ownerless until a successful account claim.
* Repairs unclaimed retries so no temporary or stale owner remains assigned.
* Clarified the ownerless setup lifecycle throughout the plugin, store page, and documentation.

= 0.3.4 =
* Made Resume re-enable the existing widget without repeating setup or migration.
* Added a no-account left/right control for plugin-managed floating widgets.
* Made password sign-in reliably available for existing password-enabled accounts during dashboard claim.
* Automatically grants the claiming account community-owner access while retaining the existing embed.
* Added WordPress documentation and Support community links throughout wp-admin.
* Tightened claim ownership checks and isolated imported-post updates to their installation community.
* Refined connection-card spacing and introduced a polished resume action.

= 0.3.3 =
* Added a left/right starting-side choice for both floating presentation presets.
* Made the live setup preview move the four-button control stack to the selected side.
* Expanded Customize messaging to cover position, feature buttons, responsive placement, appearance, and behavior.
* Added distinct SSO and White-label dashboard actions and secure claim destinations.
* Made repeated community names collision-safe during provisioning.

= 0.3.2 =
* Separated migration choices from decorative surfaces with a dedicated form panel.
* Moved dashboard actions into a clear, high-contrast tools panel.
* Displayed the complete Anchor Widget ID and added a one-click Copy action.
* Replaced the browser-default pause control with a polished, contextual site action.
* Refined the migration and connected-dashboard layouts across desktop and mobile.

= 0.3.1 =
* Added an interactive setup preview that changes with every presentation choice.
* Reworked the floating preview to show the standard four-action control stack.
* Added a representative inline page-discussion preview.
* Corrected CTA icon alignment and improved responsive setup styling.

= 0.3.0 =
* Added guided community naming and presentation setup.
* Added site-wide floating, article-only floating, and inline-under-article presentation presets.
* Added resumable, idempotent migration of approved WordPress comments as normal replies.
* Preserved public comment author attribution, nesting, permalinks, and original dates without sending email or IP addresses.
* Added cross-source import messaging for Zeeker's attributed source-post model.

= 0.2.0 =
* Added resumable, idempotent migration for published WordPress posts.
* Added an existing Widget ID connection path.
* Added direct moderation, customization, analytics, and stats dashboard actions.
* Made the one-click preset explicitly use standard bottom-right floating buttons and page discussions.
* Refined the connected dashboard layout and signup ownership messaging.

= 0.1.0 =
* Initial beta release with consent-first one-click provisioning.
* Automatic floating embed installation.
* Dashboard claim handoff and display controls.
