Description
Robosolo Connector for SEOFLY links your WordPress site to your SEOFLY account (https://seofly.ir), so the SEO articles you generate there are delivered and published on your site without copy-pasting.
How it works
- Create your SEOFLY account and add your site in the SEOFLY dashboard.
- Install the connector and open Settings Robosolo Connector for SEOFLY.
- Enter the Platform URL, Client ID and Secret, then press “Save & Connect”.
- Publish (or send as draft) articles from SEOFLY — they appear on your site automatically.
Features
- Server-to-server REST connection signed with HMAC-SHA256, with a per-request timestamp (5-minute window) and replay protection.
- Articles are delivered as posts: title, content, excerpt, slug, categories and tags.
- Featured image is uploaded automatically and set as the post thumbnail; in-article images can be uploaded to the WordPress media library before publishing.
- Full Yoast SEO and Rank Math support: meta title, meta description and focus keyword are written to the matching fields of the active SEO plugin.
- When no SEO plugin is active, the connector outputs the meta description, Open Graph tags and FAQPage JSON-LD schema itself.
- WooCommerce support: SEOFLY can read your published products, update product descriptions and SEO fields, and create brand-new WooCommerce products (simple or variable) with images, prices, stock, categories and SEO meta.
- Draft or direct publish mode — you always control what goes live.
- Connection monitoring: a signed hourly heartbeat lets your SEOFLY dashboard show that the connection is healthy — and warn you before a scheduled publish on an unreachable site can fail.
- Translation-ready (English default; translations are managed on translate.wordpress.org).
Privacy
The plugin communicates only with the SEOFLY platform URL that you configure in the settings. It does not track your visitors and does not collect analytics. See the “External Services” section for the exact data flow.
External Services
Outbound — SEOFLY platform (the URL you set in Settings Robosolo Connector for SEOFLY, for example https://seofly.ir)
The plugin contacts the SEOFLY platform API in two cases:
- Credential check — when you press “Save & Connect” in the settings, to verify your credentials.
- Connection heartbeat — an hourly WP-Cron event sends the same site identity as the credential check to the same platform URL (path /api/agent/health), so your SEOFLY dashboard can show whether the connection to your site is still alive, warn you before a scheduled publish fails and keep the recorded plugin version current.
- What is sent: the credential check sends your site URL, WordPress version, plugin version, which SEO plugin is active (Yoast, Rank Math or none) and whether WooCommerce is active. The hourly heartbeat sends the same WordPress/plugin version identity (no article content, no visitor data): the request headers carry only the Client ID, a timestamp and the HMAC-SHA256 signature.
- When: the credential check only when an administrator clicks “Save & Connect” in the plugin settings; the heartbeat hourly while credentials are configured — scheduled on activation, removed on deactivation.
- Service terms: https://seofly.ir/terms
- Service privacy policy: https://seofly.ir/privacy
Inbound — REST endpoints (seofly/v1 namespace)
The plugin registers REST API routes (site-info, products, posts, articles, media) so the SEOFLY platform can read basic site information and deliver the articles that you send from your own SEOFLY account. These routes do not use WordPress user accounts: every request must be signed with the HMAC-SHA256 secret known only to your site and your SEOFLY account, carries a timestamp with a 5-minute window, and is protected against replay. Articles are only created, updated or trashed when they come from your SEOFLY account; deleting is limited to posts created by the connector.
No other third-party services are contacted by this plugin.
Installation
- Upload the plugin files to the
/wp-content/plugins/robosolo-connector-for-seoflydirectory, or install the plugin through the WordPress plugins screen directly. - Activate the plugin through the ‘Plugins’ screen in WordPress.
- Go to Settings Robosolo Connector for SEOFLY, enter the Platform URL, Client ID and Secret from your SEOFLY dashboard and press “Save & Connect”.
- From SEOFLY, send a test article to make sure everything works.
Coming from an earlier direct-download build (“SEOFLY Connector” or “Connector for SEOFLY”)? Just install and activate this plugin — your connection settings and previously published articles carry over automatically (they live in shared WordPress options, not in the plugin folder); then deactivate the old copy.
FAQ
-
Do I need a SEOFLY account?
-
Yes. The connector is the publishing bridge for the SEOFLY content platform (seofly.ir). Everything it publishes comes from your SEOFLY account.
-
Where do I find the Client ID and Secret?
-
In your SEOFLY dashboard, open the settings of your site and copy the Client ID and Secret shown there.
-
Can I review articles before they are published?
-
Yes. Choose draft mode in SEOFLY and every delivered article will wait in your posts list for your approval.
-
Does it work with Yoast SEO or Rank Math?
-
Yes. Meta title, meta description and focus keyword are written to the matching fields of the active SEO plugin. Without an SEO plugin, the connector outputs basic meta and Open Graph tags and FAQPage schema itself.
-
Does the plugin send my site data anywhere else?
-
No. The only endpoint is the SEOFLY platform URL you configure yourself, as documented in the External Services section.
-
I used the direct-download SEOFLY Connector / Connector for SEOFLY. Do I lose my settings?
-
No. Connection settings, scheduled events and published articles migrate automatically on the first run of this plugin; nothing is lost. Because the plugin folder name changed to match its WordPress.org slug, activate this plugin first and deactivate/delete the old copy afterwards.
-
What happens to my posts if I remove the plugin?
-
Uninstalling removes the plugin options and its post meta. Your posts, images and product data remain untouched.
Reviews
There are no reviews for this plugin.
Contributors & Developers
“Robosolo Connector for SEOFLY” is open source software. The following people have contributed to this plugin.
ContributorsTranslate “Robosolo Connector for SEOFLY” into your language.
Interested in development?
Browse the code, check out the SVN repository, or subscribe to the development log by RSS.
Changelog
3.2.1
- Fixed (plugin review feedback): every REST route now declares its permission_callback literally inside its own register_rest_route() call. The routes previously shared one callback array via a PHP variable, which automated scanners could not resolve and reported the permission_callback as missing. No runtime behaviour change: all 13 routes were and are protected by the same auth() permission callback — a server-to-server check (HMAC-SHA256 signature over client ID + timestamp + method + route + body, 5-minute timestamp window, replay protection) that gates every read and write for the connected SEOFLY account only.
3.2.0
- New: per-attribute variation flag. The SEOFLY panel now sends variation=true|false for every product attribute (the new “متغیر” toggle next to each attribute name in the New Product wizard). Only flagged attributes drive variations (each with its own price and stock); unflagged ones are saved as plain, visible product attributes in the product definition.
- Changed: in variable products, attributes without the variation flag are no longer marked “used for variations”, so the product page shows dropdowns only for the attributes that really build variations.
- Compatibility: payloads from older SEOFLY panel builds always send variation=true, so behaviour is unchanged with them.
3.1.0
- New: the SEOFLY panel’s “Edit Variations” dialog now shows exactly two fields per variation (price and stock). Stock semantics per variation: a number enables stock management with that quantity (0 = out of stock), clearing a previously saved quantity turns stock management off and marks the variation fully in stock.
- New: POST /products/{id} (panel edit) accepts manage_stock=false per variation entry to release WooCommerce stock management and set the variation fully in stock.
- Fixed: the panel previously dropped the typed stock quantity for variation edits (field mismatch between panel and REST payload); quantities now save correctly.
3.0.0
- Renamed to “Robosolo Connector for SEOFLY” so the third-party relationship is clear from the title, as requested by the WordPress.org review; the text domain now matches the robosolo-connector-for-seofly slug in every file (translations move to translate.wordpress.org automatically).
- New: REST route GET /pcat — lists the store’s WooCommerce product categories (product_cat), so the SEOFLY “New Product” wizard gets a dedicated category step that reads the real categories of the user’s own site.
- New: POST /products/new accepts categories[] (product_cat term IDs, with name fallback); missing terms are created idempotently and the product is assigned to them.
- Changed: stock is now optional when creating products. When no stock quantity is sent, the product is published fully “in stock” and WooCommerce stock management is turned off for it (no quantity tracking); when a quantity is sent, stock management works exactly as before. Applies to simple products and to each variation independently.
- Internal: no breaking changes; older SEOFLY platform builds keep working.
2.9.0
- New: REST route GET /attributes — lists the store’s global product attributes (pa_*) with their terms, so the SEOFLY “New Product” wizard offers the store’s own predefined attributes (with a loading indicator) instead of free-text names.
- New: REST route POST /attr — creates (or returns an existing) global attribute with its terms, idempotent; the attribute lands in the store’s filter widgets exactly as the user typed it.
- New: REST route GET /products/{id}/variations — reads a variable product’s variations (price, stock quantity, stock status) live from the product itself for the panel’s single-edit variation list.
- Improved: POST /products/{id} now accepts price_op (increase/decrease by amount or percent, applied against the real WooCommerce price with Toman rounding — increase rounds up, decrease rounds down, step 10/100/1000 by magnitude), stock_status (“outofstock” makes the product fully out of stock without touching its numeric stock) and variations[] (per-variation regular_price / stock_quantity / stock_status). The response now returns the final price and stock status so the platform cache stays accurate.
- Improved: GET /products now includes the product type (simple/variable) — the platform excludes variable products from bulk editing.
- Internal: no breaking changes; older SEOFLY platform builds keep working.
2.8.0
- New: REST route POST /products/new — create WooCommerce products (simple or variable) straight from the SEOFLY “New Product” wizard, with images (base64, featured flag), per-variation price/stock and SEO meta (Yoast/Rank Math compatible).
- Improved: POST /products/{id} now accepts name, regular_price and stock_quantity for single/bulk editing from the SEOFLY panel (simple products; variable products are managed at variation level).
- Internal: hardening only; no breaking changes.
2.7.0
- New REST endpoint POST /seofly/v1/cat: creates (or returns an existing) WordPress category by name, so the SEOFLY article pop-ups can offer a “+” button that adds a brand-new category straight to the user’s site and publishes the article in it. Signed with the same HMAC handshake as every other endpoint; category creation is idempotent (a same-name category is returned instead of duplicated).
- No schema or option changes; downgrade-safe — older SEOFLY platform builds simply never call the new endpoint.
2.6.0
- The /products sync now also reports each product’s real WooCommerce stock status and its main image URL, so SEOFLY can offer only in-stock products inside generated articles and render product boxes/carousels with the real product image.
- front.js now wires the arrows of the related-products carousel; the carousel itself is a scroll-snap strip that also works by touch without JavaScript. front.css gains styles for the related-articles quote box, the single product box and the carousel.
2.5.1
- Featured-image delivery is now fail-proof and transparent: every upload failure (size, format, permissions, media-library error) is reported back to the SEOFLY platform with a concrete reason instead of failing silently, and the article page in SEOFLY shows exactly why the image is missing.
- The connector now also accepts a featured image sent as a URL by platform builds that recorded an older plugin version, so the post thumbnail is set regardless of the delivery contract.
- The hourly heartbeat now carries the plugin identity (WordPress/plugin version, active SEO plugin, WooCommerce) so the platform refreshes its records without a manual re-connection.
2.5.0
- SEOFLY articles can now carry accordions and copyable prompt/code blocks as native Gutenberg blocks: the platform wraps them in Custom HTML blocks () with details/summary accordions and a copy button next to every code block.
- Block comments are preserved on delivery (wp_kses_post removes HTML comments, so they are masked before sanitizing and restored after the post is saved; the visible HTML itself still passes through wp_kses_post).
- The sanitizer allowlist for this signed platform content now also keeps details/summary, the copy-button markup and code blocks with their styling classes; front.js wires the copy buttons (clipboard API with a textarea fallback) and front.css styles accordions, buttons and code blocks.
2.4.0
- The plugin is now named “Connector for SEOFLY” to make clear it is an integration for the SEOFLY platform.
- All declarations, hooks and stored data now use the unique “wcfs_” prefix; settings, post data and scheduled events migrate automatically from earlier direct-download builds.
- Removed bundled translation files in favor of translate.wordpress.org; the plugin remains translation-ready.
2.3.0
- New REST endpoint /media: the platform can upload in-article images to the WordPress media library before publishing (posts then serve those images from the site itself, not from the platform server).
- Shared hardened sideload core for featured image and in-article images (unique file names, alt text stored).
2.2.0
- Connection monitoring: a signed hourly heartbeat (WP-Cron) reports the site as reachable to your SEOFLY dashboard.
- Your SEOFLY dashboard now shows the last successful contact for each site and warns you before a scheduled publish on an unreachable site can fail.
- No change to article delivery, REST routes or stored data; the heartbeat sends an empty body and is unscheduled on deactivation.
2.1.0
- Security hardening: nonce-verified admin notices, fully unslashed and sanitized input handling.
- Replaced discouraged functions with WordPress core APIs (wp_delete_file, delete_post_meta_by_key) and removed error-suppression operators.
- Added translators comments for all placeholder strings and moved to the recommended translation loading.
- Readme cleanup: limited to 5 tags and shortened the short description to 150 characters.
2.0.0
- Complete rewrite: new option prefix, WooCommerce product SEO updates, Yoast SEO and Rank Math meta support, FAQPage JSON-LD schema, automatic featured image upload, HMAC timestamp and replay protection, translation-ready interface, uninstall data cleanup.
1.0.0
- Initial release.