Skip to content

WordPress plugin ​

Anchor.Social 0.5.0 is the official WordPress integration for Embed Elements. It places the actual hosted Social runtime inside WordPress; it does not recreate chat, reviews, questions, comments, or support as separate WordPress products.

Download the plugin · Plugin details · WordPress overview

Guided setup ​

  1. In WordPress, open Plugins → Add Plugin → Upload Plugin, upload zeeker-social.zip, and activate Anchor.Social.
  2. Name the community and choose a starting preset: Group Chat, MOD Chat, Support Forum, Comments, Product Reviews, Product Q&A, Community Feed, or Polls.
  3. Choose its placement: Anchor launcher, your own trigger, fixed in the page, or full screen. Article/product Elements can also use automatic placement or the Anchor Community block/shortcode. Chat defaults to the responsive launcher but is not restricted to it.
  4. Choose Auto, Light, or Dark; set viewing and participation; and choose Zeeker login or Zeeker/community SSO. First-run sign-in begins on a gated action.
  5. For Comments or a compatible legacy discussion config, optionally migrate published posts and approved comments.

Submitting setup provisions an unlisted, ownerless community and publishes the preset's ordinary Social/Embed settings. Signup is not part of installation. No temporary user, dummy account, or owner membership is created; ownership is assigned only after the secure claim succeeds.

The community and published config are authoritative. WordPress can select where to mount the surface and provide current article/product context, but markup cannot enable a Social capability the community disallows or weaken access and identity policy.

Available Elements ​

PresetExisting Zeeker Social compositionTypical WordPress placement
Group ChatShared community group-chat room.Responsive launcher by default; custom trigger, fixed, and full-screen are supported.
MOD ChatPrivate conversation between the current visitor and authorized community staff.Responsive launcher by default; custom trigger, fixed, and full-screen are supported.
Support ForumCommunity feed narrowed to allowed question post types, using normal posts, sorting, native community search, the preset-injected support-information box, composer, and post pages.Help-center or customer-portal page using the block or shortcode.
CommentsContextual discussion and reply composer.Automatically after singular posts, or at a chosen block/shortcode position.
Product ReviewsExisting review post types and rating fields scoped to the WooCommerce product object, with optional shared rating distribution and grounded AI summary.Automatically on a singular WooCommerce product, or a chosen product-template position.
Product Q&AExisting question post types and direct Social answer replies scoped to the WooCommerce product object.Automatically on a singular WooCommerce product, or a chosen product-template position.
Community FeedThe community feed with its configured sort and composer policy.Member home, account dashboard, or community page using the block or shortcode.
PollsExisting Zeeker poll posts and voting behavior.Automatically after singular posts, or at a chosen block/shortcode position.

These labels apply starting values only. Runtime behavior comes from the community's canonical Social capabilities and generic embed controls. One page boots one Zeeker runtime. If a block, shortcode, or automatic placement has already claimed the page, later placements do not start another instance.

Place an Element ​

Focused floating launcher ​

Preset setup defaults Group Chat and MOD Chat to a focused floating chat/support action on desktop and a mobile tray action. Content presets default fixed. Setup and the Embed dashboard may change any Element to a custom trigger, fixed, full-screen, or Anchor-launcher placement without changing its typed Social/Chat destination. WordPress preserves that published runtime when it is connected by Widget ID.

Anchor Community block ​

Add the dynamic Anchor Community block (zeeker/social-element) in the block editor. By default it uses the Widget ID connected on the Anchor.Social page in wp-admin. The block controls WordPress placement and reserved height; the community and published config still control the Social composition and policy.

Use the block for Support Forum, Community Feed, Polls, an article/product template that needs a position different from automatic placement, or a Chat config explicitly published as fixed. A block never coerces a launcher, trigger, or full-screen config into fixed mode; it reports the placement mismatch instead.

Shortcode ​

The equivalent shortcode is:

text
[zeeker_element widget_id="YOUR_CONFIG_UUID" element="reviews" show_heading="true" height="700"]
  • widget_id is optional when the plugin already has a connected Widget ID.
  • element declares the expected authoring preset for placement and admin feedback. It does not select an alternate runtime feature.
  • show_heading controls an optional surrounding WordPress heading. Leave it off when the host template already provides section context.
  • height reserves space before the asynchronous runtime loads.

Shortcodes are useful in classic-editor content, page-builder shortcode modules, and PHP templates through WordPress's normal do_shortcode() mechanism.

Automatic article placement ​

Comments and Polls can be placed after the main content of a singular WordPress post. The plugin supplies the canonical permalink and page context to the loader so tracking query strings do not fork the discussion.

Native WordPress comments remain unchanged. Disable the theme's comment section separately if the publisher wants Zeeker Comments to be the only visible discussion surface.

WooCommerce products ​

Product Reviews and Product Q&A can mount through WooCommerce's woocommerce_after_single_product_summary hook on a singular product. The plugin derives stable context from the current product and passes it to the official loader with:

  • data-zeeker-app-id;
  • data-zeeker-object-type, data-zeeker-object-id, and data-zeeker-object-title;
  • data-zeeker-object-description, data-zeeker-object-image, and data-zeeker-object-url;
  • data-zeeker-object-site-name.

The WordPress/WooCommerce product ID remains stable when its title, description, image, or permalink changes, so fresh metadata updates the same logical Zeeker product instead of creating a second review or Q&A collection.

The generated identity uses wordpress:<blog-id> as the app ID and wordpress:<blog-id>:product:<post-id> as the object ID. On multisite, the blog ID prevents equal product post IDs on two sites from colliding.

WooCommerce's own reviews are not silently relabeled as Zeeker reviews. A product review requires an existing typed Zeeker review post and rating. Likewise, a WordPress comment is never converted into a Product Q&A question.

Legacy floating configurations ​

Sites upgrading from plugin 0.3.x can keep an existing general floating or inline discussion config. The 0.4.2 preset flow does not rewrite an already published Widget ID. Use Customize in Anchor.Social when deliberately changing an older configuration's content, layout, or policy.

Actual Zeeker Social runtime ​

The plugin loads https://embed.zeeker.com/api/embed/widget/loader.js asynchronously. The loader receives the connected config ID, fixed target, WordPress source, and—when relevant—the current article or product object.

The saved controls select canonical Zeeker Social surfaces and post types. Inline placements fit the WordPress theme: the plugin does not add a second rounded frame, duplicate product/support heading, app navigation, or close button around fixed page content. Only the outer embed/container/header radius may vary by Element; internal cards, reply trays, composers, badges, search, and review summaries retain Social's component styling.

Crawlable public discussion snapshot ​

A contextual fixed Element requests a bounded discussion snapshot while WordPress renders the publisher page and caches the response for one minute. Approved replies appear as escaped, visible HTML immediately before the live Element mount. This gives the host page useful discussion content before JavaScript runs; the iframe remains the interactive source of truth.

For a contextual floating or host-triggered discussion, explicitly place [zeeker_discussion_snapshot] in a Shortcode block below the article or product where readers should see the summary. It adds at most one visible summary per page and does not mount another runtime or change the saved launcher. It emits nothing for disabled, noncontextual Chat/feed, or fixed configurations. Fixed Elements already include their summary at the mount. A floating launcher alone does not add hidden discussion text to the page.

Snapshot publication is controlled by Zeeker rather than WordPress. It is off until the global SEO launch gate is enabled, and it requires a published config with public reading, an exact configured-site/discussion origin match, and a public non-NSFW community. Draft, authenticated-only, private, unlisted, NSFW, anonymous, deleted, rejected/removed, private-author, and deactivated-author content returns no snapshot. Embed-only replies never gain Social profile or post links. WordPress validates the response binding and allowlists any returned Social links before escaping the content into the page. A timeout, unavailable API, or ineligible discussion simply omits the snapshot without blocking the live Element.

Public reply/profile anchors always use canonical https://zeeker.com URLs. The plugin leaves the publisher's canonical, robots directives, article/product metadata, and sitemap under the publisher's control. It does not automatically add discussion JSON-LD or derive aggregate ratings from a bounded excerpt. Eligible text can be considered with the host page, but indexing and ranking are search-engine decisions and are not guaranteed.

The one-minute snapshot cache does not limit a publisher's full-page/CDN cache. Set a short host-page expiry and purge copies after moderation or visibility changes; disable page caching if immediate revocation is needed. Cached host HTML remains under the publisher's control. Check source HTML with JavaScript disabled and compare host-page TTFB and Core Web Vitals after installation. See Publisher-page search for the shared server integration and validation checklist.

Account-free WordPress provisioning deliberately creates an unlisted community, so its snapshot remains absent until an owner explicitly changes that community to public. The interactive public-read Embed still works while the community is unlisted; the stricter snapshot rule prevents a search-facing host copy from silently changing the meaning of that visibility choice.

Content selection, access policy, and login policy are loaded from the community and published config. Publisher markup must not add preview parameters or attempt to select Element behavior through query values; unsigned preview values have no authority.

Theme, access, and login ​

Each WordPress embed has its own behavior settings:

SettingAvailable valuesWordPress behavior
ThemeAuto, Light, DarkAuto follows the effective host scheme. Explicit Light stays light and explicit Dark stays dark when the host changes.
Connection to ZeekerConnected; Embed only when server-supportedConnected activity can participate in ordinary Social. Embed only stores and reads activity in the exact connected config's isolated partition.
Who can viewEveryone, signed-in visitorsPublic reading or an identity gate, still subject to community visibility and membership rules.
Who can participateNobody/read-only, signed-in visitors, named guestsDisable writes, require an authenticated identity, or—when readiness is verified—let a visitor supply a display name and participate only inside that Embed. Signed-in visitors remain supported in guest-enabled mode.
Sign-in methodZeeker login, community SSO, eitherSelects which identity path the embed may use.
When to sign inOn gated action, automatically on load, managed by hostChooses when the runtime requests identity. Automatic and host-managed modes require community SSO.

The account-free WordPress setup starts in Connected mode and On gated action. It offers Zeeker login or Zeeker/community SSO. After the administrator explicitly runs the disclosed readiness check, setup also enables Embed only and named guests when Zeeker returns both exact readiness booleans; guest participation additionally requires public viewing. After the community is claimed, the Embed dashboard can refine those choices and—after SSO is configured—select community-SSO-only, automatic-on-load, or host-managed behavior. Connecting an existing published Widget ID preserves its server-authoritative choices.

After claim, the Embed Center also controls the same generic settings as any other installation: standard community-card/search visibility, optional review summaries, optional top header, contextual root/post/header visibility, composer position, post opening, outside navigation/profile access, transparent background, outer container styling, host/internal scrolling, and infinite/Load more loading. WordPress does not maintain a competing copy of those settings. The Support Forum information box is supplied programmatically by the implementation preset; neither WordPress nor the Embed editor exposes its HTML or an independent show/hide control.

Isolation and guest contribution remain fail-closed

Embed only and named guests are supported only when Zeeker reports the complete capability for the selected Social or Chat surface. Missing storage, database constraints, authorization, revocation, or scope-signing configuration makes publishing, booting, or the affected request fail; neither the plugin nor API converts it to Connected.

The plugin never handles an isolation signing secret. It installs the public Widget ID, and the hosted runtime obtains a short-lived exact-config scope directly from Zeeker. Isolated content stays out of ordinary Social feeds, search, profiles, notifications, SEO, and shared analytics. Editing, pausing, or unpublishing the config revokes an old scope on its next protected request; scoped Chat also rechecks current membership, staff role, Chat enablement, publication state, and revision.

Community settings remain authoritative for membership, posting permissions, moderation approval, uploads, and anonymous attribution. Anonymous attribution still uses a signed-in Zeeker identity; it is not unauthenticated guest publishing.

Community-level SSO ​

The SSO provider is configured once for the parent community in Admin Center → SSO. Provider secrets, allowed domains, redirect behavior, and enablement never live in the WordPress plugin.

An individual embed only chooses whether it may use Zeeker login, community SSO, or either, and whether identity begins on a gated action, on load, or through the host. First-run WordPress provisioning uses a gated action; configure SSO and refine automatic or host-managed timing in the community/Embed dashboards. When community SSO is unavailable, dependent choices remain unavailable rather than falling back silently.

For a WordPress-managed flow, provide a short-lived assertion for the current signed-in user with the zeeker_social_sso_token filter. The plugin passes the token to window.zeeker.identify() after the hosted loader is ready:

php
add_filter('zeeker_social_sso_token', function ($token, $user, $settings) {
    return my_site_issue_short_lived_zeeker_jwt($user, $settings);
}, 10, 3);

Return an empty string when no assertion is available. Generate the JWT in trusted server-side code, keep it short-lived, and never put an SSO signing secret in WordPress content, a shortcode, plugin settings, or browser JavaScript. See Single Sign-On.

Connect an existing Widget ID ​

If the embed config was created and published in the Embed dashboard first:

  1. Open Anchor.Social in wp-admin.
  2. Expand Already created an embed in Anchor.Social?
  3. Paste the complete published Widget ID.
  4. Choose Connect.

The plugin validates that the config exists and is published. A Widget ID is a public embed identifier, not an ownership credential. Connecting one installs its server-authoritative Social composition, presentation, theme, access, and login policy but does not transfer dashboard ownership or authorize archive imports.

Dashboard access and ownership ​

Plugin-managed setup creates a secure claim link after the embed is already live. Successful signup or sign-in attaches that existing config, community, conversations, and compatible imports to the account, then makes that user the community owner. It does not create a replacement config.

After claim, WordPress links directly to moderation, Embed customization, analytics, stats, SSO, and White-label tools. The connection card shows the connected administrator, and another account cannot reclaim or replace the owner.

Archive migration ​

Archive migration is offered only for Comments and compatible legacy discussion configurations. Published posts are stored as attributed third-party source posts, and approved WordPress comments become normal nested replies with their public author, permalink, and original timestamp. WordPress remains canonical and unchanged.

Migration does not fabricate typed Social data:

  • no WordPress comment becomes a Product Review without a native Zeeker rating;
  • no comment becomes a typed Product Q&A question or direct Social answer reply;
  • chat messages, support topics, feed posts, and poll votes are not inferred from the WordPress archive.

Posts run in batches of 20 and comments in batches of 50. Both are installation-scoped, deduplicated, resumable, and safe to repeat. Comment email addresses and IP addresses are never sent.

Data sent to Zeeker ​

Activation itself makes no external request. Explicit setup sends the public site URL/title, chosen community name, starting preset, placement, theme and supported policy selections, WordPress/plugin versions, locale, random installation credentials, and exact Publisher & Embed Terms acceptance evidence.

On eligible public requests, the browser loads the official runtime and sends the published Widget ID plus current canonical page or product context. On WooCommerce product pages, that includes the public product metadata listed above. Normal HTTP request metadata is also processed to operate the hosted service.

Archive migration sends only the bounded public post and comment fields described above. It excludes drafts, password-protected posts, WordPress passwords, private user-account fields, comment emails/IPs, and full article bodies.

Privacy Policy · User Terms · Publisher & Embed Terms · Publisher Data Policy and opt-out

Developer controls ​

The zeeker_social_should_load filter can change whether the connected runtime loads for the current request:

php
add_filter('zeeker_social_should_load', function ($load, $settings) {
    return is_singular('product') ? true : $load;
}, 10, 2);

Use the block, shortcode, or supported automatic hook to create the fixed target. The filter controls loader eligibility; it does not create a target, change the published Social composition, or bypass access policy.

For local development, override the endpoints in wp-config.php before the plugin loads:

php
define('ZEEKER_SOCIAL_API_URL', 'http://host.docker.internal:3006/api/embed');
define('ZEEKER_SOCIAL_LOADER_URL', 'http://localhost:3006/api/embed/widget/loader.js');

Pause, deactivate, and uninstall ​

  • Pause on this site stops injecting the loader but preserves the remote community, embed config, content, and compatible imports.
  • Resume Anchor.Social restores that same config. It does not repeat setup or reset migration progress.
  • Deactivation stops plugin code without deleting remote data.
  • Uninstall removes local WordPress settings and installation secrets. Remote data follows Zeeker account and service policies.

Security model ​

  • Every wp-admin mutation requires manage_options and a purpose-specific nonce.
  • A public Widget ID can install a published config but cannot claim ownership or import content.
  • Plugin-managed mutations use a random installation secret; ownership transfer uses a separate claim token and authenticated Zeeker session.
  • The plugin stores no Zeeker access token, SSO signing secret, email address, phone number, or password.
  • Community capability and embed policy are server-authoritative. Embed-only and named-guest prerequisites fail closed when readiness is absent, false, malformed, or revoked.
  • Contextual object metadata is bounded and uses public WordPress/WooCommerce data.

Help ​

Use the plugin's Docs link or the public WordPress Support community. Never post passwords, installation secrets, claim links, private logs, SSO secrets, or customer data in a support topic.

Anchor.Social 0.5.0 branding update ​

Version 0.5.0 introduces the warm Anchor.Social product identity across setup, management links, and default embed branding. Existing installations keep the same plugin filename, shortcode and block identifiers, Widget IDs, hooks, and hosted URLs. Zeeker ID and explicitly connected Zeeker network behavior remain available under their existing service names. Customer logos and colors continue to take precedence.