Title: The String CRM
Author: thestring
Published: <strong>Medi 29, 2026</strong>
Last modified: Hydref 18, 2026

---

Search plugins

![](https://ps.w.org/the-string-crm/assets/banner-772x250.png?rev=3718390)

![](https://ps.w.org/the-string-crm/assets/icon-256x256.png?rev=3718390)

# The String CRM

 Gan [thestring](https://profiles.wordpress.org/thestring/)

[Llwytho i lawr](https://downloads.wordpress.org/plugin/the-string-crm.1.21.8.zip)

 * [Details](https://cy.wordpress.org/plugins/the-string-crm/#description)
 * [Reviews](https://cy.wordpress.org/plugins/the-string-crm/#reviews)
 *  [Installation](https://cy.wordpress.org/plugins/the-string-crm/#installation)
 * [Development](https://cy.wordpress.org/plugins/the-string-crm/#developers)

 [Cefnogaeth](https://wordpress.org/support/plugin/the-string-crm/)

## Disgrifiad

The String CRM connects WordPress and WooCommerce with the String CRM platform while
also providing a native WordPress form builder.

Core capabilities:

 * Build forms directly in WordPress and store submissions locally.
 * Style form submit buttons with backward-compatible solid colors or sanitized 
   two-color gradients, including safe theme custom-property fallbacks.
 * Resolve signed context from any published public WordPress detail post, including
   validated `?type=cash|drive&id=POST_ID` links from a separate page, and attach
   a validated String Product relation or the WordPress title to the resulting Submission
   without adding an automatic visible context field.
 * Prefill hidden or visible fields from the page title, a sanitized URL parameter,
   a configured WordPress custom field/meta key, or the previous page URL, with 
   an optional read-only frontend display. Referrer values are intended for attribution
   and may be empty when browsers suppress them.
 * Generate a same-site dynamic CTA URL for the current published public post with`[
   string_request_url type="cash" url="/request/"]`; no post ID, title, or price
   is hardcoded.
 * Optionally send successful form submissions to String as CRM submissions.
 * Map WordPress content such as products, doctors, cars, courses, or other post
   types to String Products or Services.
 * Map WooCommerce order statuses to String Lead Journey stages and statuses.
 * Synchronize WooCommerce customers to String contacts/leads.
 * Synchronize each WooCommerce order as a separate String Submission while reusing
   the same String client when email/phone matches.
 * Set the String source of new WooCommerce cart/order Submissions to `WordPress`
   automatically and expose WooCommerce order/cart sync state inside The String 
   CRM > Customers.
 * View WooCommerce Customers in a unified CRM-style profile with Overview, Submissions,
   Orders, Carts, and Appointments tabs, stitched anonymous-to-known timeline, String
   status, lifetime deal size, product affinity, and bought-together insights.
 * Create a String Submission immediately for an identifiable WooCommerce cart: 
   logged-in customers are known from their account, while guests are linked once
   email or phone is captured. Add/remove/quantity changes update the same Submission
   and are appended as String notes; clearing all items closes that cart journey,
   and a later add starts a new cart Submission even in the same WooCommerce session.
 * Keep the cart Active before checkout, use the normal WooCommerce mapping for 
   Pending payment / Failed payment after checkout starts, and move an unpaid pending
   checkout to Abandoned cart after the inactivity timeout.
 * Attach mapped product/category context and order details such as total, currency,
   payment method, billing/shipping summary, notes, coupons, and line items.
 * Track WooCommerce storefront product behaviour (search, list view/filter/sort,
   product view/click/share/review, add/remove from cart) in a local Product Events
   log. Browser ID, Activity Session, Cart Journey, and customer identity are tracked
   separately so a known shopper can be recognized across visits while carts remain
   independent.
 * Queue identified storefront events for the String universal commerce-event API.
   String Automations own WhatsApp reminders, waits, eligibility checks, and frequency
   caps; the WordPress plugin sends no reminder itself.
 * Automatic create/update synchronization with rate-limit-aware retry and backfill
   handling.
 * Optional one-way WooCommerce coupon synchronization with store-bound identity,
   resumable reconciliation, and lifecycle retries.
 * Arabic/RTL and English/LTR WordPress admin support.

A String account is optional for local form collection. String External Partner 
API credentials are required only when remote synchronization features are enabled
by an administrator.

#### External service: String

This plugin can connect to the String service at `https://production.thestring.net`
after an authorized WordPress administrator configures String External Partner API
credentials or enables a synchronization feature that requires them.

Depending on the features enabled, the plugin may send:

 * WooCommerce storefront behaviour events, product context, page URL/referrer, 
   UTM campaign data, available advertising click/cookie identifiers, a pseudonymous
   first-party Browser ID and Activity Session ID, and customer name/email/phone
   when the shopper is identified, so String can store commerce activity and run
   configured automations. Browser cookies do not contain email or phone. Anonymous
   guest product events remain local until identity is known. The plugin does not
   inject Meta, TikTok, Snap, or other advertising pixels.
 * String External Partner client credentials to obtain an API access token.
 * WordPress form definitions and selected routing/catalog identifiers.
 * Form submissions and the fields configured by the administrator, including selected
   Branch/Product values, signed current page/product/doctor/car title context, 
   source/tracking data, and uploaded attachments when enabled.
 * Selected WordPress or WooCommerce content mapped to String Product/Service fields,
   including names, descriptions, pricing, SKU/stock, URLs, categories, currencies,
   relationship IDs, and stable integration identifiers.
 * WooCommerce workflow/status mappings used by String Lead Journey synchronization.
 * WooCommerce customer identity and billing contact details.
 * WooCommerce order details including order status, total, currency, payment method,
   billing/shipping summary, customer note, coupon codes, and line-item names.
 * When Coupon Sync is enabled, WooCommerce coupon definitions including discount
   semantics, spend/usage limits, product/category restrictions, expiry, free-shipping
   eligibility, and privacy-preserving hashes for restricted email entries. Raw 
   restricted customer emails are not transmitted.
 * When the WooCommerce cart journey is enabled, checkout identity (email/phone),
   cart total, currency, line-item names, and cart/checkout URLs. The Submission
   is created as soon as identity is available. Commerce labels are derived independently
   from canonical WooCommerce events; only WooCommerce order states use the existing
   Lead Journey mapping. Follow-up messages remain configured separately in String
   Automations.

The plugin also retrieves String account/catalog data needed for configured integrations,
such as forms, branches, products, services, sources, categories, currencies, stages,
and statuses.

Service website: https://thestring.net/
 Privacy policy: https://thestring.net/privacy-
policy/

No String API connection is made until an authorized administrator configures the
connection or enables a synchronization feature that requires it. If the administrator
changes the API URL in Connection settings, requests are sent to that configured
HTTPS endpoint instead.

#### Privacy

The String CRM stores form submissions in the WordPress database. Stored information
can include submitted values, source URL, an irreversible hash derived from the 
visitor IP address, assignment information, synchronization status/error details,
and timestamps. Accepted file uploads are stored in the WordPress uploads directory.

When String synchronization is enabled, configured submission and integration data
may also be transmitted to String as described above. The plugin adds suggested 
text to WordPress’s Privacy Policy Guide so site owners can document this processing.

Deactivation, replacement updates, and uninstall are intentionally non-destructive:
String connection credentials, Content Sync mappings, queue/backfill state, site
UUID, cart/order linkage metadata, forms, and entries are preserved so an update
or reinstall cannot disconnect the site or silently remove business records.

## Gosod

 1. Install and activate **The String CRM**.
 2. Open **The String CRM** in WordPress admin to create a form.
 3. Add a form to a page using its generated `[string_form id="123"]` shortcode.
 4. Optional: open **The String CRM -> Connection** and enter your String External 
    Partner API URL, Client ID, and Client Secret.
 5. Optional: enable form synchronization, configure **Content Sync**, or enable **
    Coupons Sync** for WooCommerce coupon definitions.

## Cwestiynau Cyffredin

### Do I need a String account?

No for local WordPress form collection. A String account and External Partner API
credentials are required only for features that synchronize data with String.

### Does the plugin send visitor data to String automatically after activation?

No. Remote synchronization requires an administrator to configure the String connection
and enable the relevant feature.

### Can I build forms directly in WordPress?

Yes. The plugin includes a form builder, stores submissions locally, and can optionally
send successful submissions to String.

### Can I sync WordPress content such as doctors, cars, courses, or products?

Yes. Content Sync can map selected WordPress post types and fields to String Products
or Services, depending on the mapping configured by the administrator.

### Does Content Sync support WooCommerce?

Yes. WooCommerce Products can be mapped to String Products. Customers and orders
can also be synchronized when their mappings are enabled.

### How are WooCommerce orders synchronized?

Each order resolves its customer using billing email and normalized phone. Existing
String clients are reused when matched; otherwise a Contact can be created first.
Each WooCommerce order is stored as its own String Submission, so repeat customers
can have multiple separate submissions under the same String client.

### Can WooCommerce order statuses be mapped to String?

Yes. WooCommerce order statuses can be mapped to String Lead Journey stages/statuses.
Orders then use the relevant mapped String status automatically.

### Do I need to press Sync Now after every order?

No. Normal operation is automatic. Manual synchronization is intended for initial
backfill, repair, or full re-sync.

### How are large catalogs handled?

The plugin reads the String Business Partner request limit and processes large synchronization
jobs in safe batches. HTTP 429 responses are treated as temporary pauses and are
retried rather than permanently failing the item.

### What happens to data when I uninstall the plugin?

Uninstall is intentionally non-destructive in the current plugin: connection credentials,
Content Sync settings, queue state, forms, and business records are preserved until
an explicit confirmed data-removal flow is provided.

## Adolygiadau

There are no reviews for this plugin.

## Contributors & Developers

“The String CRM” is open source software. The following people have contributed 
to this plugin.

Cyfranwyr

 *   [ thestring ](https://profiles.wordpress.org/thestring/)

[Translate “The String CRM” into your language.](https://translate.wordpress.org/projects/wp-plugins/the-string-crm)

### Interested in development?

[Browse the code](https://plugins.trac.wordpress.org/browser/the-string-crm/), check
out the [SVN repository](https://plugins.svn.wordpress.org/the-string-crm/), or 
subscribe to the [development log](https://plugins.trac.wordpress.org/log/the-string-crm/)
by [RSS](https://plugins.trac.wordpress.org/log/the-string-crm/?limit=100&mode=stop_on_copy&format=rss).

## Cofnod Newid

#### 1.20.23

 * Display independent WooCommerce commerce labels for active, cleared, abandoned,
   and ordered journeys.
 * Stop cart lifecycle changes from overwriting the linked Submission CRM pipeline
   status; WooCommerce order-status mapping remains unchanged.

#### 1.20.22

 * Let the first due WooCommerce event batch run immediately instead of holding 
   it behind an empty-queue synchronization lock.
 * Preserve asynchronous batch delivery; storefront requests still do not wait for
   String when no event is ready.

#### 1.20.21

 * Record each synchronized WooCommerce cart action as its own String Submission
   note so it appears as a separate Activity Log entry.
 * Mark individual cart actions synchronized only after String accepts their corresponding
   note, so acknowledged activities are not resent on normal retries.

#### 1.20.20

 * Populate the String Source selector when changing an existing mapping to WooCommerce
   Orders / Submissions, including immediately after a successful source refresh.

#### 1.20.19

 * Store and advance WooCommerce cart journeys locally when commerce event tracking
   is enabled, without requiring a String cart-to-Submission mapping.
 * Keep remote String Submission creation and status synchronization optional and
   mapping-dependent.

#### 1.20.18

 * Commerce event tracking is now explicitly opt-in and consent-aware.
 * API credentials can be managed outside WordPress with `STRINGFORM_API_URL`, `
   STRINGFORM_CLIENT_ID`, and `STRINGFORM_CLIENT_SECRET`.
 * Page/referrer query strings are removed, public AJAX actions are rate-limited,
   raw event PII is administrator-only, and failed delivery retries are bounded.

#### 1.20.17

 * Queue authoritative WooCommerce cart abandonment, payment failure, purchase, 
   order status, cancellation, and refund events.
 * Keep retries idempotent with deterministic SHA-256 message IDs and link server
   events to the existing String client and Submission.
 * Carry the checkout browser ID onto authoritative order events so first-touch 
   and last-touch attribution stay connected without adding browser ad pixels.

#### 1.20.16

 * Add cart viewed, cart updated, checkout started, and payment info entered storefront
   events.
 * Send cart contents, value, currency, stable cart journey ID, and the existing
   String Submission ID when available.
 * Deduplicate repeated server hooks inside the same request while preserving each
   queued event’s stable retry message ID.

#### 1.20.15

 * Send WooCommerce commerce batches with the canonical `woocommerce` provider and
   customer key.
 * Capture page URL, path, referrer, canonical UTM campaign fields, user agent, 
   and available Meta/TikTok/Snap/Google/Microsoft click identifiers on storefront
   events.
 * Reuse existing merchant ad cookies when present without injecting a second browser
   pixel.

#### 1.20.14

 * Restored the visible Events tab in The String CRM admin navigation.
 * Added a dedicated Events page that reuses the existing WooCommerce storefront
   event log and filters.
 * Restored Product Events access without bringing back the old top-level Entries
   model.

#### 1.20.13

 * Added an explicit Refresh String sources action to WooCommerce Orders / Submissions
   mapping.
 * Empty/stale Source catalog cache is retried directly against String before showing
   an empty selector.
 * Source API errors now show the actual response and explicitly identify the required
   sources.read scope for 403 responses.
 * Preserves a previously saved source ID if the remote catalog is temporarily unavailable.

#### 1.20.11

 * Fix logged-in shoppers not creating an Active cart Submission until checkout 
   on themes/custom AJAX flows.
 * Reconcile the current cart immediately after classic WooCommerce and Woo Blocks
   add/remove events, while retaining the normal PHP hooks as the primary path.
 * Add a late frontend fallback for non-empty logged-in carts; unchanged snapshots
   reuse the same cart journey and never create a duplicate Submission.

#### 1.20.10

 * Added a manual Fresh Sync action on Customers to reconcile local WooCommerce/
   customer records with String CRM.
 * Resolves missing String Client IDs from existing String Submission IDs first,
   then falls back to phone-first client lookup and email lookup.
 * Persists recovered client links back to carts, orders, browser identities and
   product events without creating duplicate customers or submissions.
 * Shows the last Fresh Sync result and leaves unresolved customers explicitly marked
   as Not linked.

#### 1.20.8

 * Fix Customers admin styling after the Entries-to-Customers menu restructure by
   loading plugin assets using both the WordPress hook and explicit plugin page 
   slug.
 * Keep the legacy Entries route hidden and styled for backward-compatible bookmarks.

#### 1.20.6

 * Replaced the separate Entries area with Customers as the primary CRM record screen.
 * Customer list now combines identities from form submissions, WooCommerce carts/
   orders, browser identities, and product activity.
 * Form entries are treated as Submissions inside the matching customer profile 
   instead of living in a separate global Entries screen.
 * Customer table now shows Submissions, Orders, Carts, Product activity, String
   client, contact information, and last activity.
 * Existing customer profiles keep Overview, Submissions, Orders, Carts, and Appointments;
   the Submissions tab now includes both form submissions and commerce submissions.
 * Legacy Entries URLs remain compatible but render the new Customers screen, preserving
   old bookmarks without exposing a second record model.

#### 1.20.1

 * Phone-first WooCommerce identity resolution: if checkout phone and email belong
   to different String clients, the cart/order Submission belongs to the phone client
   instead of failing.
 * Sends primary/secondary phone and email roles with WooCommerce cart and order
   Submission Additional Data; it does not auto-merge client contact records.
 * Keeps one progressive checkout Submission; if email identifies Client A first
   and a later phone identifies Client B, the same Submission moves to Client B.
 * Does not merge the two String clients automatically.

#### 1.20.0

 * Smart phone fallback: a high-confidence Egyptian local mobile number such as 
   010/011/012/015 is normalized with +20 even when the checkout/address country
   is different; customer country is never overwritten by phone country.
 * Identity resilience: a valid email can create/sync the String client even when
   the supplied phone fails String phone/country formatting validation. Phone uniqueness
   conflicts are never bypassed.
 * Keeps explicit international (+ / 00 / calling-code) normalization global and
   unchanged.

#### 1.19.9

 * Separate customer identity from activity/session/cart lifecycle: long-lived Browser
   ID (180 days, refreshed by activity), 2-hour inactivity Activity Sessions, and
   independent Cart Journeys.
 * Persist a known browser-to-customer association server-side for up to 180 days
   from the shopper’s latest commerce activity; the first-party browser cookie contains
   only a pseudonymous ID, not email/phone.
 * When a guest supplies email/phone, stitch anonymous Product Events from the same
   Browser ID for the previous 24 hours, even when they belong to multiple Activity
   Sessions.
 * Cross-device identity: a laptop and phone keep separate Browser IDs, but the 
   same normalized phone/email resolves to the same String Client ID. Each device
   then remembers that identity independently.
 * A remembered browser identity also feeds the cart tracker after the Woo guest
   session expires, so a returning known shopper can create a new Active cart Submission
   without re-entering the same phone/email.
 * If a browser later presents a different explicit phone/email, stop carrying the
   previous browser identity into the new observation; already-identified historical
   events are never reassigned.
 * Product Events admin now shows Browser ID, Activity Session, and resolved String
   Client ID separately.

#### 1.18.8

 * Keep Cleared cart inside the same WooCommerce session and the same String Submission;
   clearing the cart no longer rotates the cart journey key.
 * Adding a product again after Cleared cart reactivates the existing Submission
   as Active cart and restarts the inactivity timer.
 * Record an explicit Cart reactivated activity note in String while retaining the
   exact product-added activity.
 * Preserve one cart journey across add/remove/quantity/clear/reactivate activity
   until checkout is recovered or the WooCommerce session genuinely changes.

#### 1.18.5

 * WooCommerce cart/order Submissions now resolve the String `WordPress` source 
   automatically and send that source on creation.
 * Added a WooCommerce section inside The String CRM > Customers with Orders and
   Carts tabs.
 * Orders show customer identity, cart state, WooCommerce payment/order status, 
   total, String Submission ID, sync state, last sync/error, and WordPress source.
 * Carts show captured identity, active/abandoned/failed/recovered state, linked
   Woo order/payment status, total, String Submission ID, and sync result.
 * Commerce Entries read WooCommerce orders and the plugin cart table directly, 
   so they do not create a second copy of the order data.

#### 1.18.4

 * Cart lifecycle now distinguishes checkout Pending payment from pre-checkout Active
   cart.
 * Creating a WooCommerce order keeps the same Submission and uses the existing 
   Pending payment Lead Journey mapping while the abandonment timer continues.
 * If the pending checkout remains unpaid past the configured timeout, the same 
   Submission moves to Abandoned cart and cannot be reset by background Pending-
   payment re-sync.
 * An explicit WooCommerce Failed status now becomes a terminal failed cart state
   and uses the existing WooCommerce Failed -> String status mapping (for example
   Failed payment) instead of later being overwritten as Abandoned cart.
 * A real retry from Failed/Cancelled/Abandoned back to Pending restarts the inactivity
   timer on the same Submission.
 * No WhatsApp/recovery automation was added to the plugin; all follow-up remains
   in String Automations.

#### 1.18.3

 * Fixed cart -> order duplicate Submissions by attaching the existing cart Submission
   to the WooCommerce order before the order is first saved/live-synced.
 * Added an early woocommerce_new_order adoption hook as a second guard so Pending
   payment continues on the same Active/Abandoned cart journey.

#### 1.18.2

 * Fix Pending payment cart lifecycle: creating a Woo order no longer marks the 
   cart recovered before payment/checkout completion.
 * Active cart now moves to Abandoned cart after the configured timeout even when
   WooCommerce has already created a Pending payment order.
 * Preserve Abandoned cart on later Pending payment order syncs instead of resetting
   it from the Woo status mapping.
 * Add a request-driven fallback scan in addition to WP-Cron so 5/10-minute transitions
   are more reliable on hosts with delayed cron.
 * Clarify that Active cart and Abandoned cart are String CRM statuses, not WooCommerce
   order statuses.

#### 1.17.16

 * Harden WordPress database queries for Plugin Directory security checks by using
   prepared identifier placeholders and static query shapes.
 * Fix translation calls so translatable strings use literal text as required by
   WordPress internationalization standards.

#### 1.17.15

 * Improve HPOS/admin live-order automatic synchronization when an early incomplete
   save occurs before final billing identity or line items are available.
 * Include billing identity and line-item details in live-order change detection.
 * Retry later hooks in the same request after a failed foreground sync instead 
   of incorrectly treating the failed attempt as complete.
 * Improve support for phone-only guest orders using unambiguous international numbers
   without a leading plus sign.
 * Keep persistent queues/backfill as retry and repair paths while successful live
   saves remain deduplicated.

For older release history, see `changelog.txt` included with the plugin.

## Meta

 *  Version **1.21.8**
 *  Last updated **16 awr yn ôl**
 *  Active installations **Fewer than 10**
 *  WordPress version ** 6.4 neu uwch **
 *  Tested up to **7.1.3**
 *  PHP version ** 7.4 neu uwch **
 *  Language
 * [English (US)](https://wordpress.org/plugins/the-string-crm/)
 * Tags
 * [automation](https://cy.wordpress.org/plugins/tags/automation/)[crm](https://cy.wordpress.org/plugins/tags/crm/)
   [forms](https://cy.wordpress.org/plugins/tags/forms/)[lead generation](https://cy.wordpress.org/plugins/tags/lead-generation/)
   [woocommerce](https://cy.wordpress.org/plugins/tags/woocommerce/)
 *  [Advanced View](https://cy.wordpress.org/plugins/the-string-crm/advanced/)

## Graddau

No reviews have been submitted yet.

[Your review](https://wordpress.org/support/plugin/the-string-crm/reviews/#new-post)

[See all reviews](https://wordpress.org/support/plugin/the-string-crm/reviews/)

## Cyfranwyr

 *   [ thestring ](https://profiles.wordpress.org/thestring/)

## Cefnogaeth

Rhywbeth i'w ddweud? Angen help?

 [Gweld y fforwm cefnogi](https://wordpress.org/support/plugin/the-string-crm/)