{"id":375236,"date":"2026-09-24T11:31:17","date_gmt":"2026-09-24T11:31:17","guid":{"rendered":"https:\/\/wordpress.org\/plugins\/cadence-connector\/"},"modified":"2026-09-24T12:44:07","modified_gmt":"2026-09-24T12:44:07","slug":"cadence-connector","status":"publish","type":"plugin","link":"https:\/\/li.wordpress.org\/plugins\/cadence-connector\/","author":23573452,"comment_status":"closed","ping_status":"closed","template":"","meta":{"version":"0.7.0","stable_tag":"0.7.0","tested":"7.1.2","requires":"6.5","requires_php":"8.1","requires_plugins":null,"header_name":"Cadence Connector","header_author":"Elegia","header_description":"Lets an external content pipeline publish posts into WordPress, replace the ones it published, and link them into WPML translation groups, refusing any request that disagrees with the site's own state.","assets_banners_color":"c7c7c5","last_updated":"2026-09-24 12:44:07","external_support_url":"","external_repository_url":"","donate_link":"","header_plugin_uri":"https:\/\/github.com\/Elegia-io\/cadence-wordpress","header_author_uri":"https:\/\/elegia.io","rating":0,"author_block_rating":0,"active_installs":0,"downloads":42,"num_ratings":0,"support_threads":0,"support_threads_resolved":0,"author_block_count":0,"sections":["description","installation","faq","changelog"],"tags":{"0.7.0":{"tag":"0.7.0","author":"elegiaio","date":"2026-09-24 12:44:07","revision":3711296}},"upgrade_notice":[],"ratings":[],"assets_icons":{"icon-128x128.png":{"filename":"icon-128x128.png","revision":3711296,"resolution":"128x128","location":"assets","locale":"","width":128,"height":128},"icon-256x256.png":{"filename":"icon-256x256.png","revision":3711296,"resolution":"256x256","location":"assets","locale":"","width":256,"height":256}},"assets_banners":{"banner-1544x500.png":{"filename":"banner-1544x500.png","revision":3711296,"resolution":"1544x500","location":"assets","locale":"","width":1544,"height":500},"banner-772x250.png":{"filename":"banner-772x250.png","revision":3711296,"resolution":"772x250","location":"assets","locale":"","width":772,"height":250}},"assets_blueprints":{},"all_blocks":[],"tagged_versions":["0.7.0"],"block_files":[],"assets_screenshots":[],"screenshots":[]},"plugin_section":[],"plugin_tags":[99,7143,23853,2333,103],"plugin_category":[48],"plugin_contributors":[282488],"plugin_business_model":[],"class_list":["post-375236","plugin","type-plugin","status-publish","hentry","plugin_tags-multilingual","plugin_tags-publishing","plugin_tags-rest-api","plugin_tags-translation","plugin_tags-wpml","plugin_category-language-tools","plugin_contributors-elegiaio","plugin_committers-elegiaio"],"banners":{"banner":"https:\/\/ps.w.org\/cadence-connector\/assets\/banner-772x250.png?rev=3711296","banner_2x":"https:\/\/ps.w.org\/cadence-connector\/assets\/banner-1544x500.png?rev=3711296","banner_rtl":false,"banner_2x_rtl":false},"icons":{"svg":false,"icon":"https:\/\/ps.w.org\/cadence-connector\/assets\/icon-128x128.png?rev=3711296","icon_2x":"https:\/\/ps.w.org\/cadence-connector\/assets\/icon-256x256.png?rev=3711296","generated":false},"screenshots":[],"raw_content":"<!--section=description-->\n<p>Cadence is Elegia's content system. It drafts, translates and reviews articles\nin a brand's own voice, starting from what the brand has already published.\nThis plugin is how those articles reach your site: Cadence sends each finished\npiece to WordPress, usually as a draft for you to review, and links its\nlanguage versions as WPML translations so nobody has to do it by hand.<\/p>\n\n<p>WPML has no documented REST endpoint for creating or linking translated posts,\nso the language variants of a piece never become each other's translations\nwithout somebody linking them by hand. This plugin exposes an endpoint that\nwrites that relationship through WPML's own <code>wpml_set_element_language_details<\/code>\naction, plus endpoints to publish a piece and to replace one it published.<\/p>\n\n<p>Callers authenticate with a connector key issued on the settings screen, not as\na WordPress user, and every request carries an Ed25519 signature over its own\nbytes: the key says a caller may publish here, the signature says this body is\nthe one that caller composed. A request that disagrees with the site's state\nis refused rather than reconciled: a duplicate identifier, a language the site\ndoes not run, a post this key did not publish.<\/p>\n\n<p>Nothing else is added: no post types, no front-end output, no telemetry, and no\nnetwork requests of its own. The plugin never calls out; it only answers.<\/p>\n\n<p>WPML 4.5 or newer is needed for the translation-linking endpoint; only WPML's\ncore plugin is used, not the String Translation or Translation Management\nadd-ons. Monolingual sites run the same plugin with no WPML; which one a site\nis must be declared in the request rather than detected here.<\/p>\n\n<p>Source, full endpoint reference and the security model:\nhttps:\/\/github.com\/Elegia-io\/cadence-wordpress<\/p>\n\n<!--section=installation-->\n<ol>\n<li>Install through <strong>Plugins \u2192 Add New<\/strong>, or upload the plugin directory to\n   wp-content\/plugins\/.<\/li>\n<li>Activate it. The three endpoints go live under <code>\/wp-json\/cadence\/v1\/<\/code>.<\/li>\n<li>Go to <strong>Settings \u2192 Cadence Connector<\/strong> and issue a connector key: give it a\nlabel naming the tenant, tick the capabilities it needs, choose the byline\nits posts carry and the post types it may publish into.<\/li>\n<li>The key is shown once and never again; the site stores only a SHA-256 of it.\nCallers present it as an <code>X-Cadence-Key<\/code> header.<\/li>\n<\/ol>\n\n<!--section=faq-->\n<dl>\n<dt id=\"does%20the%20plugin%20send%20anything%20anywhere%3F\"><h3>Does the plugin send anything anywhere?<\/h3><\/dt>\n<dd><p>No. It answers requests and makes none of its own. It has no update-fetching\ncode of its own either: updates arrive through WordPress.org like any other\nhosted plugin.<\/p><\/dd>\n<dt id=\"does%20it%20need%20wpml%3F\"><h3>Does it need WPML?<\/h3><\/dt>\n<dd><p>Only the translation-linking endpoint does. Publishing and replacing work on a\nmonolingual site with no WPML installed.<\/p><\/dd>\n\n<\/dl>\n\n<!--section=changelog-->\n<h4>0.7.0<\/h4>\n\n<ul>\n<li>The translation-linking route now requires an Ed25519 attestation over the\nplan's own bytes, as the publishing and replacing routes already did.<\/li>\n<li>Connector keys carry the post types they may reach; a key that no longer\npublishes a type no longer links it either.<\/li>\n<\/ul>","raw_excerpt":"Receives articles from Cadence, Elegia&#039;s content system, as WordPress drafts, with each language version linked as a WPML translation.","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/li.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin\/375236","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/li.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin"}],"about":[{"href":"https:\/\/li.wordpress.org\/plugins\/wp-json\/wp\/v2\/types\/plugin"}],"replies":[{"embeddable":true,"href":"https:\/\/li.wordpress.org\/plugins\/wp-json\/wp\/v2\/comments?post=375236"}],"author":[{"embeddable":true,"href":"https:\/\/li.wordpress.org\/plugins\/wp-json\/wporg\/v1\/users\/elegiaio"}],"wp:attachment":[{"href":"https:\/\/li.wordpress.org\/plugins\/wp-json\/wp\/v2\/media?parent=375236"}],"wp:term":[{"taxonomy":"plugin_section","embeddable":true,"href":"https:\/\/li.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_section?post=375236"},{"taxonomy":"plugin_tags","embeddable":true,"href":"https:\/\/li.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_tags?post=375236"},{"taxonomy":"plugin_category","embeddable":true,"href":"https:\/\/li.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_category?post=375236"},{"taxonomy":"plugin_contributors","embeddable":true,"href":"https:\/\/li.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_contributors?post=375236"},{"taxonomy":"plugin_business_model","embeddable":true,"href":"https:\/\/li.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_business_model?post=375236"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}