{"id":220060,"date":"2025-01-25T20:35:58","date_gmt":"2025-01-25T20:35:58","guid":{"rendered":"https:\/\/wordpress.org\/plugins\/posts-bridge\/"},"modified":"2026-02-15T01:14:11","modified_gmt":"2026-02-15T01:14:11","slug":"posts-bridge","status":"publish","type":"plugin","link":"https:\/\/twd.wordpress.org\/plugins\/posts-bridge\/","author":22048111,"comment_status":"closed","ping_status":"closed","template":"","meta":{"_crdt_document":"","version":"4.1.3","stable_tag":"4.1.3","tested":"6.9.4","requires":"6.7","requires_php":"8.0","requires_plugins":null,"header_name":"Posts Bridge","header_author":"codeccoop","header_description":"Bridge backend data to WP posts collections","assets_banners_color":"8c9eba","last_updated":"2026-02-15 01:14:11","external_support_url":"","external_repository_url":"","donate_link":"https:\/\/buymeacoffee.com\/codeccoop","header_plugin_uri":"https:\/\/postsbridge.codeccoop.org","header_author_uri":"https:\/\/www.codeccoop.org","rating":5,"author_block_rating":0,"active_installs":20,"downloads":1386,"num_ratings":1,"support_threads":0,"support_threads_resolved":0,"author_block_count":0,"sections":["description","faq","changelog"],"tags":{"2.4.0":{"tag":"2.4.0","author":"codeccoop","date":"2025-01-25 20:35:28"},"2.4.1":{"tag":"2.4.1","author":"codeccoop","date":"2025-02-02 19:19:38"},"3.0.0":{"tag":"3.0.0","author":"codeccoop","date":"2025-02-20 14:44:49"},"3.0.1":{"tag":"3.0.1","author":"codeccoop","date":"2025-02-21 21:28:21"},"3.0.2":{"tag":"3.0.2","author":"codeccoop","date":"2025-02-23 22:27:35"},"3.0.3":{"tag":"3.0.3","author":"codeccoop","date":"2025-02-26 00:34:32"},"3.0.4":{"tag":"3.0.4","author":"codeccoop","date":"2025-03-13 23:32:05"},"3.0.5":{"tag":"3.0.5","author":"codeccoop","date":"2025-04-03 23:48:50"},"3.0.7":{"tag":"3.0.7","author":"codeccoop","date":"2025-05-03 22:54:36"},"3.0.8":{"tag":"3.0.8","author":"codeccoop","date":"2025-05-08 23:00:57"},"3.0.9":{"tag":"3.0.9","author":"codeccoop","date":"2025-07-18 13:52:53"},"4.0.0":{"tag":"4.0.0","author":"codeccoop","date":"2025-09-30 10:44:57"},"4.0.1":{"tag":"4.0.1","author":"codeccoop","date":"2025-10-24 22:22:34"},"4.1.0":{"tag":"4.1.0","author":"codeccoop","date":"2026-02-06 19:25:33"},"4.1.1":{"tag":"4.1.1","author":"codeccoop","date":"2026-02-09 00:37:51"},"4.1.2":{"tag":"4.1.2","author":"codeccoop","date":"2026-02-12 07:37:58"},"4.1.3":{"tag":"4.1.3","author":"codeccoop","date":"2026-02-15 01:14:11"}},"upgrade_notice":[],"ratings":{"1":0,"2":0,"3":0,"4":0,"5":1},"assets_icons":{"icon-256x256.png":{"filename":"icon-256x256.png","revision":3369346,"resolution":"256x256","location":"assets","locale":""}},"assets_banners":{"banner-772x250.png":{"filename":"banner-772x250.png","revision":3369346,"resolution":"772x250","location":"assets","locale":""}},"assets_blueprints":{},"all_blocks":{"posts-bridge\/remote-fields":{"$schema":"https:\/\/schemas.wp.org\/trunk\/block.json","apiVersion":3,"name":"posts-bridge\/remote-fields","version":"1.2.0","title":"Remote Fields","category":"widgets","description":"Remote fields custom block that replace marks by its remote value on the render.","icon":"airplane","supports":{"anchor":true,"html":false},"usesContext":["postId","postType"],"textdomain":"posts-bridge","editorScript":"file:.\/index.js","editorStyle":"file:.\/index.css","style":"file:.\/view.css","viewScript":"file:.\/view.js","render":"file:.\/render.php"}},"tagged_versions":["2.4.0","2.4.1","3.0.0","3.0.1","3.0.2","3.0.3","3.0.4","3.0.5","3.0.7","3.0.8","3.0.9","4.0.0","4.0.1","4.1.0","4.1.1","4.1.2","4.1.3"],"block_files":[],"assets_screenshots":{"screenshot-1.png":{"filename":"screenshot-1.png","revision":3459153,"resolution":"1","location":"assets","locale":""},"screenshot-2.png":{"filename":"screenshot-2.png","revision":3459153,"resolution":"2","location":"assets","locale":""},"screenshot-3.png":{"filename":"screenshot-3.png","revision":3459153,"resolution":"3","location":"assets","locale":""},"screenshot-4.png":{"filename":"screenshot-4.png","revision":3459153,"resolution":"4","location":"assets","locale":""},"screenshot-5.png":{"filename":"screenshot-5.png","revision":3459153,"resolution":"5","location":"assets","locale":""},"screenshot-6.png":{"filename":"screenshot-6.png","revision":3459153,"resolution":"6","location":"assets","locale":""}},"screenshots":{"1":"Settings page \u2013 Configure global plugin options","2":"Backends \u2013 Save and reuse API connection details","3":"Bridges \u2013 Create synchronization mappings for your post collections","4":"Synchronization - Dispatch manual, detached or live synchronizations","5":"Remote CPTs - Bind post collections to remote backend records","6":"Debug console \u2013 Monitor and troubleshoot requests."},"jetpack_post_was_ever_published":false},"plugin_section":[],"plugin_tags":[569,23033,597,2345,1564],"plugin_category":[],"plugin_contributors":[237074],"plugin_business_model":[],"class_list":["post-220060","plugin","type-plugin","status-publish","hentry","plugin_tags-automation","plugin_tags-http-api","plugin_tags-integration","plugin_tags-productivity","plugin_tags-synchronization","plugin_contributors-codeccoop","plugin_committers-codeccoop"],"banners":{"banner":"https:\/\/ps.w.org\/posts-bridge\/assets\/banner-772x250.png?rev=3369346","banner_2x":false,"banner_rtl":false,"banner_2x_rtl":false},"icons":{"svg":false,"icon":"https:\/\/ps.w.org\/posts-bridge\/assets\/icon-256x256.png?rev=3369346","icon_2x":"https:\/\/ps.w.org\/posts-bridge\/assets\/icon-256x256.png?rev=3369346","generated":false},"screenshots":[{"src":"https:\/\/ps.w.org\/posts-bridge\/assets\/screenshot-1.png?rev=3459153","caption":"Settings page \u2013 Configure global plugin options"},{"src":"https:\/\/ps.w.org\/posts-bridge\/assets\/screenshot-2.png?rev=3459153","caption":"Backends \u2013 Save and reuse API connection details"},{"src":"https:\/\/ps.w.org\/posts-bridge\/assets\/screenshot-3.png?rev=3459153","caption":"Bridges \u2013 Create synchronization mappings for your post collections"},{"src":"https:\/\/ps.w.org\/posts-bridge\/assets\/screenshot-4.png?rev=3459153","caption":"Synchronization - Dispatch manual, detached or live synchronizations"},{"src":"https:\/\/ps.w.org\/posts-bridge\/assets\/screenshot-5.png?rev=3459153","caption":"Remote CPTs - Bind post collections to remote backend records"},{"src":"https:\/\/ps.w.org\/posts-bridge\/assets\/screenshot-6.png?rev=3459153","caption":"Debug console \u2013 Monitor and troubleshoot requests."}],"raw_content":"<!--section=description-->\n<p>Synchronize backend data with WordPress post collections over HTTP APIs, enabling remote and automated web content management.<\/p>\n\n<p>With <strong>Posts Bridge<\/strong> you can move your workspace from the WordPress admin to collaboration tools like Google Spreadsheets, Airtable or Grist, or get your Odoo and Dolibarr data automatically synchronized with your website. Don't bother your team with context switching and manual web content synchronizations. Work where your data is, and use Posts Bridge to seamlessly transform it to web content without effort.<\/p>\n\n<h3>How it works<\/h3>\n\n<p>Posts Bridge treats post collections as indexes that represents your backend data and allows you to use Gutenberg, WordPress' powerful page builder, as the frontend editor of your backend. Either by manually triggering bulk synchronizations, by scheduling automatic background jobs, or dynamically loading data on renders, Posts Bridge fully integrates your backend data into the WordPress CMS system.<\/p>\n\n<h3>Add-ons<\/h3>\n\n<p>Posts Bridge comes with free add-ons. Each add-on add to the plugin new bridges to work with specific APIs.<\/p>\n\n<p>Posts Bridge has the following add-ons:<\/p>\n\n<p><strong>\ud83d\uddd3\ufe0f Productivity<\/strong><\/p>\n\n<ul>\n<li><a href=\"https:\/\/postsbridge.codeccoop.org\/documentation\/airtable\/\">Airtable<\/a><\/li>\n<li><a href=\"https:\/\/postsbridge.codeccoop.org\/documentation\/google-calendar\/\">Google Calendar<\/a><\/li>\n<li><a href=\"https:\/\/postsbridge.codeccoop.org\/documentation\/google-sheets\/\">Google Sheets<\/a><\/li>\n<li><a href=\"https:\/\/postsbridge.codeccoop.org\/documentation\/grist\/\">Grist<\/a><\/li>\n<li><a href=\"https:\/\/postsbridge.codeccoop.org\/documentation\/nextcloud\/\">Nextcloud<\/a><\/li>\n<\/ul>\n\n<p><strong>\ud83d\udce6 ERP &amp; Accounting<\/strong><\/p>\n\n<ul>\n<li><a href=\"https:\/\/postsbridge.codeccoop.org\/documentation\/dolibarr\/\">Dolibarr<\/a><\/li>\n<li><a href=\"https:\/\/postsbridge.codeccoop.org\/documentation\/holded\/\">Holded<\/a><\/li>\n<li><a href=\"https:\/\/postsbridge.codeccoop.org\/documentation\/odoo\/\">Odoo<\/a><\/li>\n<\/ul>\n\n<p><strong>\u270f\ufe0f CMS<\/strong><\/p>\n\n<ul>\n<li><a href=\"https:\/\/postsbridge.codeccoop.org\/documentation\/wordpress\/\">WordPress<\/a><\/li>\n<\/ul>\n\n<p><strong>Need a custom integration?<\/strong><\/p>\n\n<p>Connect to any custom API using standard HTTP methods and authentication using the abstract <strong>REST API<\/strong> add-on. Perfect for integrating with proprietary or less common systems.<\/p>\n\n<h3>Features<\/h3>\n\n<p><strong>Bridges<\/strong>\nBridges act as dynamic mappings between your backend data and WordPress post type collections. Seamlessly convert each database item into a WordPress post, and map backend fields directly to post fields, metadata, or taxonomy terms\u2014effortlessly synchronizing your data.<\/p>\n\n<p><strong>Backends<\/strong>\nCreate a reusable \"connection profile\" for your API. Store your API URL, headers, and credentials once, and apply them across all your bridges. No repetitive setup required\u2014just connect and go.<\/p>\n\n<p><strong>Credentials<\/strong>\nSecure your HTTP requests with flexible authentication options: API keys, Basic Auth, Bearer Tokens, OAuth, RPC credentials, or Digest Auth. Choose the method that fits your needs.<\/p>\n\n<p><strong>Field mappers<\/strong>\nTransform your backend API responses to align with WordPress\u2019s post structure (e.g., post_title, post_content, post_name).<\/p>\n\n<p>With mappers you can map backend data to post fields, custom fields and into taxonomy terms (such as categories and tags).<\/p>\n\n<p><strong>Remote fields<\/strong>\nLoad backend data dynamically at render time. Replace placeholder marks in your post HTML with real-time remote data, ensuring your content is always up to date.<\/p>\n\n<p><strong>Background synchronizations<\/strong>\nAutomate your content workflow by scheduling synchronizations to run in the background. Keep your WordPress site fresh with minimal manual intervention.<\/p>\n\n<p><strong>Custom types<\/strong>\nEasily register custom post types directly from the plugin settings using an intuitive visual interface. Define post meta fields and link post types to taxonomies\u2014no coding required.<\/p>\n\n<p><strong>Debugging console<\/strong>\nTrack requests, responses, and errors in real time. Diagnose issues quickly and ensure smooth integration with your backend systems.<\/p>\n\n<h3>Links<\/h3>\n\n<ul>\n<li><a href=\"https:\/\/postsbridge.codeccoop.org\/\">\ud83c\udf10 Official website<\/a><\/li>\n<li><a href=\"https:\/\/postsbridge.codeccoop.org\/documentation\/\">\ud83d\udcda Documentation<\/a><\/li>\n<li><a href=\"https:\/\/github.com\/codeccoop\/posts-bridge\/\">\ud83d\udcbb GitHub<\/a><\/li>\n<li><a href=\"https:\/\/www.codeccoop.org\">\ud83c\udfe2 C\u00f2dec<\/a><\/li>\n<li><a href=\"https:\/\/wordpress.org\/plugins\/posts-bridge\/#reviews\">\u2b50 Rate Posts Bridge<\/a><\/li>\n<\/ul>\n\n<!--section=faq-->\n<dl>\n<dt id=\"do%20i%20need%20to%20know%20how%20to%20code%3F\"><h3>Do I need to know how to code?<\/h3><\/dt>\n<dd><p>Nope! Posts Bridge is designed to set up complex HTTP configurations and pipelines of data transformation without the need to write code.<\/p>\n\n<p>In addition, you can extend Posts Bridge with code using its hooks and PHP APIs.<\/p><\/dd>\n<dt id=\"can%20i%20connect%20to%20my%20custom%20api%3F\"><h3>Can I connect to my custom API?<\/h3><\/dt>\n<dd><p>Absolutely! Posts Bridge supports any HTTP API, whether it\u2019s a cloud service or a self-hosted solution (like a Dockerized API on your VPS). If your API uses standard HTTP methods (GET, POST, PUT, etc.), Posts Bridge can connect to it.<\/p>\n\n<p>Maybe a little understanding about how HTTP and HTTP-like APIs works will be required to set up your custom integrations.<\/p><\/dd>\n<dt id=\"what%20if%20my%20api%20requires%20authentication%3F\"><h3>What if my API requires authentication?<\/h3><\/dt>\n<dd><p>Posts Bridge supports API keys, Basic Auth, Bearer Tokens, OAuth, RPC credentials, Digest Auth and custom headers.<\/p><\/dd>\n<dt id=\"is%20there%20a%20free%20trial%3F\"><h3>Is there a free trial?<\/h3><\/dt>\n<dd><p>Posts Bridge, including all its add-ons, is free to use.<\/p><\/dd>\n<dt id=\"how%20can%20i%20get%20support%3F\"><h3>How can I get support?<\/h3><\/dt>\n<dd><p>You can get support from C\u00f2dec using the <a href=\"https:\/\/wordpress.org\/support\/plugin\/posts-bridge\/\">Posts Bridge support forum<\/a> for free. We aim to respond to all inquiries within 24-48 hours.<\/p><\/dd>\n\n<\/dl>\n\n<!--section=changelog-->\n<h4>4.1.3<\/h4>\n\n<ul>\n<li>feat: add gmt date fields in bridge mappers<\/li>\n<li>feat: scroll into view after ajax progress display<\/li>\n<li>feat: wordpress schema introspection as data to json loops<\/li>\n<li>fix: sync ping json returns<\/li>\n<li>fix: openapi expand fields schema loop<\/li>\n<\/ul>\n\n<h4>4.1.2<\/h4>\n\n<ul>\n<li>feat: display ajax synchronization progress<\/li>\n<li>feat: always support default wp taxonomies<\/li>\n<li>feat: cpt registration api public methods<\/li>\n<li>fix: cache introspection transient names<\/li>\n<\/ul>\n\n<h4>4.1.1<\/h4>\n\n<ul>\n<li>feat: full live fetch strategy with automatic post titles<\/li>\n<li>feat: detached synchronizations<\/li>\n<li>feat: introspection api cache<\/li>\n<li>feat: introspection filters on generic addon<\/li>\n<li>feat: remote fields schema as addon introspection requests<\/li>\n<li>feat: remote fields post type selector for site editor<\/li>\n<li>feat: check dav modified on nextcloud table headers requests<\/li>\n<li>feat: odoo pings as login requests<\/li>\n<\/ul>\n\n<h4>4.1.0<\/h4>\n\n<ul>\n<li>feat: apply wp coding standards<\/li>\n<li>feat: plugin repo directory refactor<\/li>\n<li>feat: http deps as library<\/li>\n<li>feat: grist addon<\/li>\n<li>feat: airtable addon<\/li>\n<li>feat: holded addon<\/li>\n<li>feat: google calendar addon<\/li>\n<li>feat: nextcloud addon refactor<\/li>\n<li>feat: odoo addon refactor<\/li>\n<li>feat: dolibarr addon refactor<\/li>\n<li>feat: openapi response introspections<\/li>\n<li>feat: new cpts settings tab and support for custom fields<\/li>\n<li>feat: addon endpoints and introspection<\/li>\n<li>feat: bridge single_endpoint pattern<\/li>\n<li>feat: move lock files to uploads<\/li>\n<li>feat: mappers api fields datalists<\/li>\n<li>feat: post custom fields and taxonomies datalists<\/li>\n<li>feat: attachments requested with backends<\/li>\n<li>feat: addons http defaults registration<\/li>\n<li>feat: dropdown select search input<\/li>\n<li>fix: gsheets value range url encoding<\/li>\n<\/ul>\n\n<h4>4.0.1<\/h4>\n\n<ul>\n<li>feat: odoo add-on jobs template<\/li>\n<li>feat: disable plugin activation if uploads dir is not writable<\/li>\n<li>fix: avoid warnings with coalescing<\/li>\n<li>fix: template tax mappers<\/li>\n<\/ul>\n\n<h4>4.0.0<\/h4>\n\n<ul>\n<li>feat: schemas refactor<\/li>\n<li>feat: frontend refactor<\/li>\n<li>feat: improve custom post types ui<\/li>\n<li>feat: sync ping poll<\/li>\n<li>feat: remove templates<\/li>\n<li>feat: remove gsheets addon<\/li>\n<li>feat: bridge enabled state<\/li>\n<li>feat: update deps<\/li>\n<\/ul>\n\n<h4>3.0.8<\/h4>\n\n<ul>\n<li>feat: setting sanitization with defaults recovery<\/li>\n<li>feat: add wp rest mirror template<\/li>\n<li>feat: wp rest reuse authorization if exists<\/li>\n<\/ul>\n\n<h4>3.0.7<\/h4>\n\n<ul>\n<li>feat: addons mount method<\/li>\n<li>feat: improve debug console outputs<\/li>\n<li>fix: exclude loco files from git<\/li>\n<\/ul>","raw_excerpt":"Synchronize backend data with WordPress post collections over HTTP APIs, enabling remote and automated web content management.","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/twd.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin\/220060","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/twd.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin"}],"about":[{"href":"https:\/\/twd.wordpress.org\/plugins\/wp-json\/wp\/v2\/types\/plugin"}],"replies":[{"embeddable":true,"href":"https:\/\/twd.wordpress.org\/plugins\/wp-json\/wp\/v2\/comments?post=220060"}],"author":[{"embeddable":true,"href":"https:\/\/twd.wordpress.org\/plugins\/wp-json\/wporg\/v1\/users\/codeccoop"}],"wp:attachment":[{"href":"https:\/\/twd.wordpress.org\/plugins\/wp-json\/wp\/v2\/media?parent=220060"}],"wp:term":[{"taxonomy":"plugin_section","embeddable":true,"href":"https:\/\/twd.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_section?post=220060"},{"taxonomy":"plugin_tags","embeddable":true,"href":"https:\/\/twd.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_tags?post=220060"},{"taxonomy":"plugin_category","embeddable":true,"href":"https:\/\/twd.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_category?post=220060"},{"taxonomy":"plugin_contributors","embeddable":true,"href":"https:\/\/twd.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_contributors?post=220060"},{"taxonomy":"plugin_business_model","embeddable":true,"href":"https:\/\/twd.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_business_model?post=220060"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}