WordPress plugin
The Datalumo plugin connects a WordPress site to your knowledge base without any code. It keeps your posts and pages in sync, adds a chat widget and a search box, and can serve WordPress' own search results from Datalumo's ranking.
Everything is configured under Settings → Datalumo, in five tabs: Connection, Content sync, Chatbot, Search box, and Enhanced search.
| Feature | What it does |
|---|---|
| Content sync | Pushes published content to a source, and follows edits, unpublishes, and deletes |
| Chatbot | A floating assistant on every page, or inline with a shortcode |
| Search box | A Datalumo search box anywhere, with the [datalumo_search] shortcode |
| Enhanced search | Your theme's search page, ranked by Datalumo, with an optional AI summary |
| Visitor identity | Logged-in users pick up their previous conversations |
Requirements: WordPress 6.0 or newer, PHP 8.1 or newer.
#Install
- In WordPress, go to Plugins → Add New, search for Datalumo, and install it. You can also get it from WordPress.org.
- Activate the plugin, then open Settings → Datalumo.
#Connect your account
On the Connection tab, press Connect with Datalumo. Sign in if needed, pick an organisation, then pick or create a knowledge base and a chatbot and search widget (or skip either).
Manual setup can be done by pasting the API-key. After pasting the key, you can test if the connection works. Once this is done, you can continue to further configure the plugin.
#Sync your content
On the Content sync tab, pick a source and tick the post types that belong in it (posts, pages, products, or any custom type your site registers). Save, then press Sync now for the first full run.
After that, syncing takes care of itself:
| In WordPress | In Datalumo |
|---|---|
| A post is published | The page is created or updated |
| A published post is edited | The page is updated |
| A post is unpublished or trashed | The page is removed |
| A post is deleted | The page is removed |
Only published content of the post types you ticked is synced. Autosaves and revisions are ignored. All of this runs in the background.
#What a page looks like
| Page field | Comes from |
|---|---|
| Title | Post title |
| Content | Post content, with blocks rendered and shortcodes stripped |
| URL | Permalink |
| Thumbnail | Featured image. WooCommerce products use the product image. Removing it and syncing again clears it. |
| Reference | Post ID, so re-syncing updates instead of duplicating |
| Details | Post type, categories, tags, author, published and modified dates. WooCommerce products also send sku (variation SKUs included), product categories and tags, and visible attributes, and append those to the body so they are searchable. An empty long description still syncs when a short description or SKU is present. |
Because the post ID is the reference, a full sync is always safe to run again. It updates what is already there.
#Large sites
A full sync walks your posts in batches of 50 and paces itself against the API's rate limits. Two things worth knowing:
- Pushing is not indexing. When the push finishes, Datalumo still has to read and embed everything it received. Progress continues on the source page in your dashboard after WordPress reports it is done.
- Use a real cron on big sites. Background work in WordPress is normally triggered by visitors. On a site with tens of thousands of posts, a server cron running
wp cron event run --due-nowkeeps the run moving steadily.
If a sync stops early, the reason is shown next to the button. Rate limits and temporary server errors are retried automatically; a rejected post or an invalid key stops the run so you can fix it.
#Add the chatbot
- Create a chat widget in Datalumo.
- Add this site's domain to the widget's websites list. That is what authorises the widget in the browser.
- Copy the widget key from the widget editor, under For developers. It is safe to have in a page.
- Paste it on the Chatbot tab and tick Show the floating chat on every page.
To place the chat inside a page instead of floating it, use a shortcode:
[datalumo_chat]
#Add a search box
Create a search widget, add your domain to its websites list, and paste its key on the Search box tab. Then drop the box wherever you want it:
[datalumo_search]
Both shortcodes accept a widget attribute if one page needs a different widget than the site default:
[datalumo_search widget="ORG_ID/WIDGET_ID"]
In the block editor, add a Shortcode block and paste the same thing.
#Enhanced search
Enhanced search replaces the ranking behind your existing search page. A visitor searches as usual, your theme renders the results as usual, but the order comes from Datalumo instead of from WordPress' keyword matching.
On the Enhanced search tab:
| Setting | Notes |
|---|---|
| Enable | Off by default. If Datalumo is unreachable, WordPress' own search takes over silently. |
| Widget key | A search widget key. This site's domain must be on its websites list. |
| Limit to post types | Leave everything unticked to improve every search. |
| AI summary | A short streamed answer above the results, written from the top matches. |
| Summary placement | Optional CSS selector of your results container, and before or after the list. Detected automatically when empty. |
Nothing in your theme has to change. Your templates, excerpts, and pagination keep working, and search filters your visitors apply (a post type, a WooCommerce price range) still narrow the results.
A few details worth knowing:
- The top 50 matches are fetched once per search and paged through locally, so pagination stays fast.
- The AI summary only appears for questions, not single keywords, and only when there are results.
- Result clicks are reported back to Datalumo automatically, tied to the search that produced them, so search analytics in your dashboard covers your theme's own result list.
#WooCommerce
When WooCommerce is active, product searches keep their usual behaviour: catalog sorting (price, popularity, rating, newest) is honoured, products hidden from search stay hidden, and the price filter widget applies to the results.
Synced products also send, by default: short description (so a product with no long description is still indexed), product categories and tags, visible attributes, and SKU (parent plus variation SKUs).
#Chat page actions
The plugin listens for confirmed Act on the page events from version 0.1.0. Add them from Reply → Plugin actions → WordPress. Cart, checkout, and add to cart need WooCommerce.
| Event | Needs | What it does |
|---|---|---|
add_to_cart |
product_id (quantity and sku optional) |
Adds the product to the WooCommerce cart. Variable products ask the visitor to pick options. |
view_cart |
none | Opens the WooCommerce cart. |
open_checkout |
none | Opens WooCommerce checkout. Does not take payment in chat. |
open_page |
page_id, slug, or a same-site url |
Opens a published post or page. |
#Visitor identity
Turn on Visitor identity on the Chatbot tab and paste the widget's identity signing secret (also under For developers). Logged-in users then keep their conversation history between visits.
The plugin signs each WordPress user id on the server with that secret, so a visitor cannot claim to be someone else. The secret itself stays in your database and never reaches the browser.
At this moment, the plugin does not yet provide a built-in way to have visitors continue a past conversation. If you'd like to implement this yourself, please take note of signed visitor identity.
#For developers
The plugin ships a set of filters for the cases the settings screen does not cover.
| Filter | Use it to |
|---|---|
datalumo_page_payload |
Add or change fields on the page pushed for a post |
datalumo_is_indexable |
Skip individual posts |
datalumo_render_shortcodes |
Render shortcodes into synced content instead of stripping them |
datalumo_bulk_sync_batch_size |
Push smaller batches during a full sync (50 max) |
datalumo_search_max_results |
Change how many ranked results a search fetches (50 max) |
datalumo_should_intercept_search |
Decide per query whether Datalumo ranks it |
datalumo_resolve_args |
Adjust the query used to load matched posts |
datalumo_sort_map |
Map your own orderby values to a sort |
datalumo_summary_filters |
Narrow the AI summary the same way your results are narrowed |
datalumo_results_selector |
Point click tracking at your results container |
datalumo_chat_context |
Add or change page hints sent to chat (page_id, product_id, …) |
For example, to index a custom field alongside the post content:
add_filter('datalumo_page_payload', function (array $payload, WP_Post $post): array {
$payload['meta']['sku'] = get_post_meta($post->ID, '_sku', true);
return $payload;
}, 10, 2);
Custom field and taxonomy mappings can also be defined per sync with the same filter, which is the recommended route until the settings screen covers them.
#Troubleshooting
| Symptom | Check |
|---|---|
| Connect & test fails | The value is an API token from API keys, not a widget key; the key has pages.write |
| Nothing appears in the source | The post type is ticked for that sync, and the post is published |
| Content synced but not searchable yet | Indexing runs after the push; watch progress on the source page |
| Full sync stalls | Set up a server cron for WordPress' scheduled tasks |
| Chat or search box does not appear | The site's domain is on the widget's websites list, and the widget key is ORG_ID/WIDGET_ID |
| Enhanced search looks unchanged | The toggle is on, a search widget key is set, and the searched post type is within the limit you set |
| Conversations do not carry over | Visitor identity is on and the signing secret matches the widget |
#Related
- Introduction for the other ways to integrate
- Install for embedding search and chat by hand
- Authentication for API keys, permissions, and widget access
- Pages API for the endpoints the plugin uses under the hood