=== Hiland Connector ===
Contributors: hilandseoteam
Tags: seo, meta description, seo title, alt text, faq
Requires at least: 6.2
Tested up to: 7.1
Requires PHP: 7.4
Stable tag: 1.1.0
License: GPLv2 or later
License URI: https://www.gnu.org/licenses/gpl-2.0.html

Lets Hiland Content Engine improve your SEO titles, meta descriptions, page text and image alt text, safely, with a change log and Undo.

== Description ==

Hiland Connector connects your site to [Hiland Content Engine](https://ai.hilandseo.com/), an SEO content service run by HilandSEO Technology Limited. Hiland diagnoses your pages and suggests better SEO titles, meta descriptions and copy. WordPress's own REST API cannot reach the fields of SEO plugins or the text of Elementor pages, so this plugin gives Hiland a small, safe API for exactly those things.

You need a Hiland Content Engine account to use it: the plugin is the connection, and the analysis and suggestions happen in Hiland. Without an account, the plugin does nothing on its own.

Hiland can change, on pages, posts, WooCommerce products and their categories:

* the SEO title and meta description, in the fields of Yoast SEO, Rank Math, All in One SEO (pages, posts and products) or SEOPress;
* text in Elementor widgets: headings, text, buttons, accordions, toggles, tabs, icon lists and similar. Changes are saved through Elementor, so the page and its CSS are rebuilt;
* an exact piece of visible text in a page made with the block editor or the classic editor (plain text only: never markup, and never text inside a script, a stylesheet or a form field);
* the alt text of images;
* Hiland modules (an intro, a list of links, or an FAQ with FAQPage structured data) that you place on a page with the `[hiland_module id="…"]` shortcode or the Hiland module block.

This plugin's routes cannot create, publish, unpublish or delete pages or posts, change their addresses, or change layouts, styles, menus, your theme, settings, plugins, users, prices or stock. You review every change to your pages in Hiland before it is applied. When Hiland publishes an article to your site, or updates one it published, it also sets that post's meta description in your SEO plugin.

= Safe by design =

* The plugin creates and stores no credentials. Hiland signs in with a WordPress application password that you approve for it on WordPress's own Authorize Application screen, when you add your site in Hiland.
* An application password works across WordPress's whole REST API, not only this plugin's routes: Hiland can do whatever its user can. So approve Hiland as a user of its own with the Editor role (see the FAQ), which can change content but not plugins, themes, users or settings. Hiland needs nothing more. You can revoke the password at any time in the user's profile.
* Deactivating or deleting the plugin revokes the application passwords approved for Hiland.
* Before every change Hiland says what it expects to find. If the page was edited since Hiland last read it, nothing is changed.
* Every change is logged with what it replaced. Settings → Hiland Connector lists the latest changes, each with an Undo button that works as long as the page has not been changed again since.
* The plugin writes no files, makes no requests to other sites, collects no statistics and runs no code it receives.

== External services ==

This plugin does not contact any external service itself: it makes no outgoing requests, loads nothing from other sites and sends no data anywhere on its own.

It adds REST API routes to your site (under `/wp-json/hiland/v1/`) that **Hiland Content Engine** calls. Hiland Content Engine is an external service, provided by HilandSEO Technology Limited at [https://ai.hilandseo.com/](https://ai.hilandseo.com/). It can call these routes only after you approve an application password for it, on WordPress's Authorize Application screen when you add your site in Hiland (or create one in a user's profile and enter it in Hiland); it then signs in as the user the password belongs to, and WordPress lets it read and change only what that user can, through these routes and WordPress's own REST API.

**What Hiland reads, and when.** When you connect your site, when Hiland checks the connection, when it publishes or updates an article on your site, and when you analyse or optimise your site in Hiland, it reads:

* the site's address, its WordPress, PHP and plugin versions, the active theme, and which SEO plugin, page builder and WooCommerce are active;
* your pages, posts, WooCommerce products and their categories: title, address, status, dates, SEO title, meta description, focus keyword, noindex and canonical settings, and their text;
* your images' addresses, titles and alt text;
* this plugin's modules and change log.

**What Hiland writes, and when.** When you apply a change you reviewed in Hiland: SEO titles and meta descriptions, text in Elementor widgets and in block-editor or classic content, image alt text, and Hiland modules. And when Hiland publishes an article written in Hiland to your site, or updates one it published there (which you do in Hiland, or schedule with Hiland's AutoBlog): that post's meta description, in your SEO plugin, and only if the post's description is still what Hiland just read. Every change is logged on your site and can be undone from Settings → Hiland Connector.

The data Hiland reads is sent from your site to Hiland's servers, in answer to Hiland's requests, and is used to provide the service. Hiland Content Engine's [Terms and Conditions](https://hilandseo.com/terms-and-conditions/) and [Privacy Policy](https://hilandseo.com/privacy-policy/) apply to it.

The FAQ module's structured data names the schema.org vocabulary (`"@context": "https://schema.org"`); nothing is loaded from schema.org.

== Installation ==

1. In Plugins → Add New Plugin, search for "Hiland Connector", then install and activate it. (Or upload the plugin's zip in Plugins → Add New Plugin → Upload Plugin.)
2. Sign in to WordPress as the user Hiland should act as. We recommend a user of its own with the Editor role (see the FAQ).
3. In Hiland Content Engine, go to Integrations, add a WordPress site and enter your site's address. WordPress asks you to approve Hiland; once you do, you are back in Hiland and the site is connected. There is nothing to copy.
4. Your site must use HTTPS: WordPress offers application passwords only over a secure connection.

== Frequently Asked Questions ==

= Do I need a Hiland Content Engine account? =

Yes. The plugin is the connection between your site and Hiland Content Engine, and does nothing by itself. Hiland Content Engine is a separate service; see [hilandseo.com](https://hilandseo.com/).

= Does the plugin send data anywhere or track anything? =

No. The plugin makes no outgoing requests and collects no statistics. Hiland Content Engine reads from your site only through the plugin's REST routes, signed in with the application password you approved for it; see External services above.

= Which user should Hiland use? =

A user of its own with the Editor role is best: an Editor can change every page and post, but not plugins, themes, users or settings, and Hiland needs nothing more. Create the user in Users → Add New User, sign in as it, then add your site in Hiland and approve Hiland as that user. Approved by an administrator, Hiland could do through WordPress's REST API whatever an administrator can. For WooCommerce products, use a user with the Shop Manager role instead. Changing product categories needs a user who can manage them.

= Which SEO plugins and page builders are supported? =

SEO titles and meta descriptions: Yoast SEO, Rank Math, All in One SEO and SEOPress. Page text: Elementor, the block editor and the classic editor. None of them is required: Settings → Hiland Connector shows what the plugin found on your site, and Hiland offers only what your site supports.

= Can I undo what Hiland changed? =

Yes. Settings → Hiland Connector lists the latest changes with an Undo button. Undo is refused if the page was changed again afterwards, so it never overwrites your own edits. The newest 2,000 changes are kept.

= How do I disconnect Hiland? =

Revoke Hiland's application password in the profile of the user it belongs to (Users → Profile → Application Passwords). Deactivating the plugin also revokes the application passwords approved for Hiland; a password you created in a profile yourself keeps working with WordPress's own REST API until you revoke it there.

= What happens when I uninstall the plugin? =

The application passwords approved for Hiland are revoked, and the change log and Hiland's modules are deleted. Pages that still contain a module's shortcode show it as plain text, so remove modules from your pages first.

== Screenshots ==

1. Settings → Hiland Connector: what the plugin found on your site, how to connect Hiland, and the latest changes, each with Undo.
2. The Hiland module block in the block editor, with its module ID and a live preview.
3. An FAQ module on a page. It also adds FAQPage structured data for search engines.

== Changelog ==

= 1.1.0 =
* Change: the plugin no longer creates application passwords. You connect from Hiland Content Engine, which asks WordPress for one on WordPress's own Authorize Application screen: you approve it there, and there is nothing to copy. Deactivating or deleting the plugin still revokes the application passwords approved for Hiland.

= 1.0.1 =
* Fix: page caches no longer keep the plugin's answers. Every answer of its REST routes tells LiteSpeed Cache (and LiteSpeed's server cache) not to cache it, and carries WordPress's no-cache headers, refusals included. A cached answer could show Hiland a value from before its own last change, so its next change was refused.

= 1.0.0 =
* First public release: SEO titles and descriptions in Yoast SEO, Rank Math, All in One SEO and SEOPress; Elementor text; block-editor and classic text; image alt text; Hiland modules by shortcode or block, with FAQPage structured data; a change log with Undo.

== Upgrade Notice ==

= 1.1.0 =
The settings page no longer creates application passwords: connect from Hiland Content Engine, and approve it in WordPress.

= 1.0.1 =
Sites with LiteSpeed Cache or another page cache: Hiland's changes are no longer refused because a cache answered with an old value.

= 1.0.0 =
First public release.
