{"id":356526,"date":"2026-09-06T21:58:13","date_gmt":"2026-09-06T21:58:13","guid":{"rendered":"https:\/\/wordpress.org\/plugins\/seobot-agent-connector\/"},"modified":"2026-09-13T21:38:25","modified_gmt":"2026-09-13T21:38:25","slug":"youtix-sync-connector","status":"publish","type":"plugin","link":"https:\/\/en-au.wordpress.org\/plugins\/youtix-sync-connector\/","author":23550444,"comment_status":"closed","ping_status":"closed","template":"","meta":{"version":"1.3.2","stable_tag":"1.3.2","tested":"7.1","requires":"6.4","requires_php":"7.4","requires_plugins":null,"header_name":"Youtix Sync Connector","header_author":"Youtix","header_description":"Connects a WordPress site to the Youtix service for authenticated article synchronization and publishing.","assets_banners_color":"","last_updated":"2026-09-13 21:38:25","external_support_url":"","external_repository_url":"","donate_link":"","header_plugin_uri":"","header_author_uri":"","rating":0,"author_block_rating":0,"active_installs":0,"downloads":145,"num_ratings":0,"support_threads":0,"support_threads_resolved":0,"author_block_count":0,"sections":["description","installation","faq","changelog"],"tags":{"1.0.0":{"tag":"1.0.0","author":"mohammadhosseinzadeh","date":"2026-09-06 22:52:41","revision":3684005},"1.2.5":{"tag":"1.2.5","author":"mohammadhosseinzadeh","date":"2026-09-06 22:57:34","revision":3684007},"1.2.6":{"tag":"1.2.6","author":"mohammadhosseinzadeh","date":"2026-09-07 13:55:48","revision":3685048},"1.2.7":{"tag":"1.2.7","author":"mohammadhosseinzadeh","date":"2026-09-07 14:20:22","revision":3685105},"1.3.2":{"tag":"1.3.2","author":"mohammadhosseinzadeh","date":"2026-09-13 21:38:25","revision":3694215}},"upgrade_notice":{"1.2.0":"<p>Security and WordPress.org release-readiness update. Update service-side request handling to preserve the existing HMAC payload contract and account for replay-protection responses.<\/p>"},"ratings":{"1":0,"2":0,"3":0,"4":0,"5":0},"assets_icons":[],"assets_banners":[],"assets_blueprints":{},"all_blocks":[],"tagged_versions":["1.0.0","1.2.5","1.2.6","1.2.7","1.3.2"],"block_files":[],"assets_screenshots":[],"screenshots":[]},"plugin_section":[],"plugin_tags":[5936,279471,186,1558,279470],"plugin_category":[55],"plugin_contributors":[279472],"plugin_business_model":[],"class_list":["post-356526","plugin","type-plugin","status-publish","hentry","plugin_tags-articles","plugin_tags-content-synchronization","plugin_tags-seo","plugin_tags-sync","plugin_tags-youtix","plugin_category-seo-and-marketing","plugin_contributors-mohammadhosseinzadeh","plugin_committers-mohammadhosseinzadeh"],"banners":[],"icons":{"svg":false,"icon":"https:\/\/s.w.org\/plugins\/geopattern-icon\/youtix-sync-connector.svg","icon_2x":false,"generated":true},"screenshots":[],"raw_content":"<!--section=description-->\n<p>Youtix is a service operated at <code>https:\/\/api.youtix.site<\/code> by this plugin's author\/contributors.<\/p>\n\n<p>Youtix Sync Connector connects a WordPress site to the Youtix service at <code>https:\/\/api.youtix.site<\/code>. After a site administrator explicitly saves valid service credentials and completes the connection, the plugin provides a single dashboard page for viewing service data and accepts authenticated article requests from the service.<\/p>\n\n<p>The plugin uses HTTPS, an API key, timestamped HMAC signatures, and replay protection for service communication. It creates or updates only posts marked as managed by Youtix. Incoming featured images, in-article gallery images, and an optional promotional banner block are size-limited, decoded strictly, verified as supported image types, and stored in the local WordPress Media Library.<\/p>\n\n<p>The Youtix service is an external service and must provide substantive functionality for this connector to operate. Before activating the connection, review the current Youtix service terms and privacy notice supplied by your service provider.<\/p>\n\n<h4>Key features<\/h4>\n\n<ul>\n<li>A single, top-level Youtix dashboard page for connecting and viewing service data.<\/li>\n<li>Authenticated REST endpoints for health checks and managed article create, read, update, and delete operations.<\/li>\n<li>Timestamped HMAC verification and one-time replay protection for incoming service requests.<\/li>\n<li>Protection against updating, reading, or deleting posts that were not created by this connector.<\/li>\n<li>Secure local handling of optional featured images, in-article gallery images, and a promotional banner block, with strict size and type checks and duplicate-upload avoidance across re-syncs.<\/li>\n<li>A scheduled health ping while connected and an hourly cleanup task for expired replay records.<\/li>\n<li>Suggested privacy-policy content for site administrators.<\/li>\n<\/ul>\n\n<h3>Privacy<\/h3>\n\n<p>This plugin adds suggested content to the WordPress privacy-policy guide. Site administrators must review and adapt that suggested text before publishing a privacy policy. The service connection is initiated only after an administrator enters credentials and selects <code>Save and connect<\/code>.<\/p>\n\n<h3>External services<\/h3>\n\n<p>This plugin connects to the Youtix service, hosted at <code>https:\/\/api.youtix.site<\/code>, to synchronize and publish articles on this site on behalf of the site administrator.<\/p>\n\n<p>It sends the following data:<\/p>\n\n<ul>\n<li>During the connection handshake (triggered manually by the administrator when saving credentials): the site URL, the WordPress version, and the plugin version.<\/li>\n<li>On every scheduled health check (hourly, while a connection is active) and on every authenticated request coming from the service: a timestamped HMAC signature used to verify the request, no personal data.<\/li>\n<li>The service, in turn, may send article titles, content, SEO metadata, optional featured images, optional in-article gallery images, and an optional promotional banner block to this site for publication.<\/li>\n<\/ul>\n\n<p>No data is sent until an administrator has explicitly entered valid credentials and selected \"Save and connect\".<\/p>\n\n<p>This service is provided by Youtix: <a href=\"https:\/\/youtix.site\/%d9%82%d9%88%d8%a7%d9%86%db%8c%d9%86-%d9%88-%d9%85%d9%82%d8%b1%d8%b1%d8%a7%d8%aa\/\">Terms of Service<\/a>, <a href=\"https:\/\/youtix.site\/%d8%ad%d8%b1%db%8c%d9%85-%d8%ae%d8%b5%d9%88%d8%b5%db%8c\/\">Privacy Policy<\/a>.<\/p>\n\n<!--section=installation-->\n<ol>\n<li>Upload the <code>youtix-sync-connector<\/code> folder to the <code>\/wp-content\/plugins\/<\/code> directory, or install the plugin through the WordPress Plugins screen.<\/li>\n<li>Activate the plugin through the <code>Plugins<\/code> screen in WordPress.<\/li>\n<li>Open <code>Youtix<\/code> from the WordPress administration menu.<\/li>\n<li>Obtain a Client ID, Client Secret, and API Key from your Youtix service account.<\/li>\n<li>Enter the credentials and select <code>Save and connect<\/code>.<\/li>\n<li>Confirm the connection succeeds before enabling automated article delivery in the Youtix service.<\/li>\n<\/ol>\n\n<!--section=faq-->\n<dl>\n<dt id=\"where%20does%20the%20plugin%20connect%3F\"><h3>Where does the plugin connect?<\/h3><\/dt>\n<dd><p>The connector uses the fixed production endpoint <code>https:\/\/api.youtix.site<\/code>. It does not accept arbitrary administrator-supplied endpoint URLs.<\/p><\/dd>\n<dt id=\"what%20data%20is%20sent%20to%20the%20external%20service%3F\"><h3>What data is sent to the external service?<\/h3><\/dt>\n<dd><p>During the connection handshake, the plugin sends the site URL, the WordPress version, and the plugin version. Authenticated dashboard and health requests are then sent to the Youtix service. The service may send article titles, content, SEO metadata, optional featured images, optional in-article gallery images, and an optional promotional banner block to WordPress for publication.<\/p><\/dd>\n<dt id=\"are%20credentials%20displayed%20after%20saving%3F\"><h3>Are credentials displayed after saving?<\/h3><\/dt>\n<dd><p>No. Saved connection credentials are not rendered back into the administration form. Leave a credential field blank when reconnecting to retain its previously saved value.<\/p><\/dd>\n<dt id=\"can%20the%20service%20update%20any%20post%20on%20my%20site%3F\"><h3>Can the service update any post on my site?<\/h3><\/dt>\n<dd><p>No. The connector only permits the authenticated service to retrieve, update, or move to trash a post that is already marked as managed by Youtix.<\/p><\/dd>\n<dt id=\"what%20happens%20when%20the%20plugin%20is%20removed%3F\"><h3>What happens when the plugin is removed?<\/h3><\/dt>\n<dd><p>The plugin removes its connection options, cached dashboard data, scheduled events, and replay-protection records. It does not delete created posts or their media automatically, so that a site owner does not accidentally lose published content.<\/p><\/dd>\n\n<\/dl>\n\n<!--section=changelog-->\n<h4>1.3.2<\/h4>\n\n<ul>\n<li>Fixed a bug introduced in 1.3.1: after a failed connection, the detailed \"last error\" record (including the transport error message) was being immediately overwritten by a second, context-less write for the same failed request, so the technical-details card on the connection screen always showed empty transport details even though the underlying error had a specific message. Each failure is now recorded exactly once, with whatever context is available for that specific failure reason.<\/li>\n<\/ul>\n\n<h4>1.3.1<\/h4>\n\n<ul>\n<li>The last failed connection\/API attempt (event, HTTP\/transport error code, and the underlying transport error message, all already scrubbed of credentials and request\/response bodies) is now stored independent of WP_DEBUG, so it can be shown on the connection screen even on sites that have never enabled debug logging.<\/li>\n<li>The connection screen now shows this technical detail, plus a read-only, copy-ready summary block, whenever the status is \"failed\" \u2014 including whether PHP's cURL extension is available and whether WP_HTTP_BLOCK_EXTERNAL is blocking the request to the Youtix host, since both are common causes of a connection never reaching the service.<\/li>\n<\/ul>\n\n<h4>1.3.0<\/h4>\n\n<ul>\n<li>Added support for in-article gallery images: an optional <code>lead_images<\/code> block (rendered above all sections) and optional per-section <code>images<\/code> (rendered immediately after each section's text). Images are uploaded into the Media Library and embedded by their resolved URL, never inline as base64.<\/li>\n<li>Added support for an optional promotional <code>banner<\/code> block: a single ready-made HTML fragment (only the most recently attached banner is ever accepted), sanitized and inserted once, right after the first section.<\/li>\n<li>Gallery image uploads are deduplicated by content hash per post, so re-syncing an article whose images have not changed does not create duplicate Media Library attachments.<\/li>\n<li>Added strict size, count, and type validation for the new <code>lead_images<\/code>, per-section <code>images<\/code>, and <code>banner<\/code> fields, consistent with the existing featured-image checks; a defensive per-request cap on the total number of gallery images bounds worst-case upload work regardless of payload shape.<\/li>\n<li>Refactored the shared image decode\/type-detection\/upload logic (previously only used by the featured image) into common helpers, now reused by the featured image, lead images, and section images alike.<\/li>\n<li>Bumped the plugin version to reflect this payload contract change (the Youtix service's corresponding payload version was incremented to 3).<\/li>\n<li>When the connection handshake or another outbound request fails before reaching the service (e.g. the host's network, firewall, or SSL configuration blocks the connection), the debug log (written only when WP_DEBUG and WP_DEBUG_LOG are enabled) now also includes the underlying transport error message, so the specific cause can be identified without guesswork.<\/li>\n<\/ul>\n\n<h4>1.2.7<\/h4>\n\n<ul>\n<li>Translated the connection (login) page and the connection log\/debug guidance into Persian. Field labels (Client ID, Client Secret, API Key) remain in English; helper text, status messages, and debug instructions are now in Persian.<\/li>\n<\/ul>\n\n<h4>1.2.6<\/h4>\n\n<ul>\n<li>Fixed a typo in the Yoast SEO postmeta keys used by <code>sync_third_party_meta()<\/code>: values were being written to <code>_yoast_wp_seo_*<\/code> instead of the correct <code>_yoast_wpseo_*<\/code> keys, so Yoast never picked up the meta title, meta description, focus keyword, or Open Graph title\/description sent by Youtix, even though the data was saved successfully.<\/li>\n<li>Added a one-time migration (runs automatically on the next page load, guarded so it only runs once) that moves any values already sitting under the old misspelled keys over to the correct keys on existing posts, without overwriting a correct-key value that's already set.<\/li>\n<\/ul>\n\n<h4>1.2.3<\/h4>\n\n<ul>\n<li>Renamed the plugin from \"SEOBot Connector for Youtix\" to \"Youtix Sync Connector\" to avoid confusion with an existing, unrelated \"SEOBot AI\" plugin, per WordPress.org Plugin Review Team guidance. Updated all internal identifiers (classes, functions, option and meta keys, text domain) to match.<\/li>\n<\/ul>\n\n<h4>1.2.2<\/h4>\n\n<ul>\n<li>Documented and justified the two remaining postmeta lookup queries flagged by the Plugin Check tool.<\/li>\n<\/ul>\n\n<h4>1.2.1<\/h4>\n\n<ul>\n<li>Renamed and rebranded to comply with WordPress.org naming guidelines.<\/li>\n<li>Fixed enqueue, i18n, escaping, and variable-naming issues found by the Plugin Check tool.<\/li>\n<li>Bumped \"Tested up to\" to WordPress 7.1.<\/li>\n<\/ul>\n\n<h4>1.2.0<\/h4>\n\n<ul>\n<li>Replaced development localhost configuration with the fixed HTTPS production endpoint.<\/li>\n<li>Added secure REST request schemas, replay protection, managed-post authorization, and safer request validation.<\/li>\n<li>Added strict featured-image size, MIME, file-type, and image-editor validation.<\/li>\n<li>Removed sensitive request\/response logging and raw response display.<\/li>\n<li>Added WordPress.org metadata, privacy-policy guidance, and translatable administration strings.<\/li>\n<\/ul>\n\n<h4>1.1.0<\/h4>\n\n<ul>\n<li>Initial release.<\/li>\n<\/ul>","raw_excerpt":"Connect a WordPress site to the Youtix service for authenticated, secure article synchronization and publishing.","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/en-au.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin\/356526","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/en-au.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin"}],"about":[{"href":"https:\/\/en-au.wordpress.org\/plugins\/wp-json\/wp\/v2\/types\/plugin"}],"replies":[{"embeddable":true,"href":"https:\/\/en-au.wordpress.org\/plugins\/wp-json\/wp\/v2\/comments?post=356526"}],"author":[{"embeddable":true,"href":"https:\/\/en-au.wordpress.org\/plugins\/wp-json\/wporg\/v1\/users\/mohammadhosseinzadeh"}],"wp:attachment":[{"href":"https:\/\/en-au.wordpress.org\/plugins\/wp-json\/wp\/v2\/media?parent=356526"}],"wp:term":[{"taxonomy":"plugin_section","embeddable":true,"href":"https:\/\/en-au.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_section?post=356526"},{"taxonomy":"plugin_tags","embeddable":true,"href":"https:\/\/en-au.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_tags?post=356526"},{"taxonomy":"plugin_category","embeddable":true,"href":"https:\/\/en-au.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_category?post=356526"},{"taxonomy":"plugin_contributors","embeddable":true,"href":"https:\/\/en-au.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_contributors?post=356526"},{"taxonomy":"plugin_business_model","embeddable":true,"href":"https:\/\/en-au.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_business_model?post=356526"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}