{"id":379111,"date":"2026-10-08T19:21:18","date_gmt":"2026-10-08T19:21:18","guid":{"rendered":"https:\/\/wordpress.org\/plugins\/cws-api-table-sync\/"},"modified":"2026-10-08T19:20:53","modified_gmt":"2026-10-08T19:20:53","slug":"cws-api-table-sync","status":"publish","type":"plugin","link":"https:\/\/ary.wordpress.org\/plugins\/cws-api-table-sync\/","author":23577734,"comment_status":"closed","ping_status":"closed","template":"","meta":{"version":"1.5.3","stable_tag":"1.5.3","tested":"7.1.3","requires":"6.4","requires_php":"8.0","requires_plugins":null,"header_name":"CWS API Table Sync","header_author":"Cameron Web Services","header_description":"Synchronizes REST\/JSON API data into fast local WordPress database tables for querying and frontend display.","assets_banners_color":"","last_updated":"2026-10-08 19:20:53","external_support_url":"","external_repository_url":"","donate_link":"","header_plugin_uri":"","header_author_uri":"","rating":0,"author_block_rating":0,"active_installs":0,"downloads":103,"num_ratings":0,"support_threads":0,"support_threads_resolved":0,"author_block_count":0,"sections":["description","installation","faq","changelog"],"tags":{"1.5.3":{"tag":"1.5.3","author":"cameronwebservices","date":"2026-10-08 19:20:53","revision":3735394}},"upgrade_notice":[],"ratings":[],"assets_icons":{"icon-256x256.png":{"filename":"icon-256x256.png","revision":3735412,"resolution":"256x256","location":"assets","locale":"","width":256,"height":256}},"assets_banners":[],"assets_blueprints":{},"all_blocks":[],"tagged_versions":["1.5.3"],"block_files":[],"assets_screenshots":{"screenshot-1.jpg":{"filename":"screenshot-1.jpg","revision":3735394,"resolution":"1","location":"assets","locale":"","width":1133,"height":676},"screenshot-2.jpg":{"filename":"screenshot-2.jpg","revision":3735394,"resolution":"2","location":"assets","locale":"","width":1133,"height":725},"screenshot-3.jpg":{"filename":"screenshot-3.jpg","revision":3735394,"resolution":"3","location":"assets","locale":"","width":1121,"height":573}},"screenshots":{"1":"Free source setup with authentication and pagination controls.","2":"Free display columns with drag handles, keyboard ordering controls, formatting, and alignment.","3":"Frontend table with fictional JSONPlaceholder records rendered locally and styled by the Astra theme."}},"plugin_section":[],"plugin_tags":[1556,153,1118,23853,1564],"plugin_category":[59],"plugin_contributors":[285142],"plugin_business_model":[],"class_list":["post-379111","plugin","type-plugin","status-publish","hentry","plugin_tags-api","plugin_tags-database","plugin_tags-json","plugin_tags-rest-api","plugin_tags-synchronization","plugin_category-utilities-and-tools","plugin_contributors-cameronwebservices","plugin_committers-cameronwebservices"],"banners":[],"icons":{"svg":false,"icon":"https:\/\/ps.w.org\/cws-api-table-sync\/assets\/icon-256x256.png?rev=3735412","icon_2x":"https:\/\/ps.w.org\/cws-api-table-sync\/assets\/icon-256x256.png?rev=3735412","generated":false},"screenshots":[{"src":"https:\/\/ps.w.org\/cws-api-table-sync\/assets\/screenshot-1.jpg?rev=3735394","caption":"Free source setup with authentication and pagination controls."},{"src":"https:\/\/ps.w.org\/cws-api-table-sync\/assets\/screenshot-2.jpg?rev=3735394","caption":"Free display columns with drag handles, keyboard ordering controls, formatting, and alignment."},{"src":"https:\/\/ps.w.org\/cws-api-table-sync\/assets\/screenshot-3.jpg?rev=3735394","caption":"Frontend table with fictional JSONPlaceholder records rendered locally and styled by the Astra theme."}],"raw_content":"<!--section=description-->\n<p>CWS API Table Sync turns structured REST\/JSON API data into a synchronized local WordPress database table.<\/p>\n\n<p>Instead of requesting an external API whenever a visitor loads a page, the plugin fetches data during synchronization, maps selected JSON fields to typed local database columns, and renders frontend tables from the local WordPress database.<\/p>\n\n<p>This is useful for structured datasets such as directories, inventory, financial data, public datasets, listings, events, jobs, catalogs, and other API-fed information.<\/p>\n\n<h4>Features<\/h4>\n\n<ul>\n<li>Connect to multiple REST\/JSON endpoints.<\/li>\n<li>Test API connectivity and inspect JSON response structure.<\/li>\n<li>Detect record collections inside nested JSON responses.<\/li>\n<li>Map API fields to typed custom database columns.<\/li>\n<li>Select a stable external ID for record updates.<\/li>\n<li>Synchronize manually or through the scheduled WordPress cron event.<\/li>\n<li>Support page-number pagination.<\/li>\n<li>Support no authentication, Bearer tokens, Basic Authentication, and custom authentication headers\/API keys.<\/li>\n<li>Snapshot mode for showing only the latest successful synchronization.<\/li>\n<li>Historical mode for retaining unique synchronized records across runs.<\/li>\n<li>Store the original record JSON alongside mapped columns.<\/li>\n<li>Configure frontend column labels, visibility, order, value formatting, prefix\/suffix, and alignment.<\/li>\n<li>Render synchronized data with a shortcode.<\/li>\n<li>Keep frontend rendering local: the shortcode does not call the external API during page loads.<\/li>\n<li>Optionally remove plugin data when the plugin is deleted. Deactivation does not delete persistent data.<\/li>\n<\/ul>\n\n<h4>Basic Workflow<\/h4>\n\n<ol>\n<li>Open CWS API Table Sync &gt; Sources.<\/li>\n<li>In Source Settings, enter a name and REST\/JSON endpoint. Choose authentication and pagination only when your API requires them, then click Save Endpoint.<\/li>\n<li>Use Test Connection to check the saved endpoint. Results appear beside the button.<\/li>\n<li>In Inspect Sample Data, inspect the API response and select the collection of records when the response contains nested data.<\/li>\n<li>In Map Fields, choose the fields to store and a stable external ID, then create the local table.<\/li>\n<li>In Display Columns, set headings, visibility, formatting, and optional text prefixes\/suffixes. Drag the handles or use Move up \/ Move down to reorder columns, then click Save Display Settings.<\/li>\n<li>In Synchronize Data, click Sync Now and check the result beside the button.<\/li>\n<li>Add [cws_api_table_sync] to a Shortcode block in a post or page.<\/li>\n<\/ol>\n\n<p>Successful setup actions open the next accordion section. You can reopen a completed section to change its settings. You can configure multiple sources. Select Add New Source to create another connection; each source has independent mapping, synchronization, and display settings.<\/p>\n\n<h4>Shortcode<\/h4>\n\n<p>Render the configured source:<\/p>\n\n<p>[cws_api_table_sync]<\/p>\n\n<p>Render a source by its stable source slug:<\/p>\n\n<p>[cws_api_table_sync source=\"source-slug\"]<\/p>\n\n<p>Set rows per page, from 1 through 100 (default 25). Navigation appears above and below tables with more than one page:<\/p>\n\n<p>[cws_api_table_sync limit=\"50\"]<\/p>\n\n<p>Choose navigation placement with pagination=\"top\", \"bottom\", or \"both\":<\/p>\n\n<p>[cws_api_table_sync limit=\"10\" pagination=\"both\"]<\/p>\n\n<p>Use pagination=\"none\" to display only the first limited set of rows:<\/p>\n\n<p>[cws_api_table_sync limit=\"10\" pagination=\"none\"]<\/p>\n\n<p>Frontend pagination works independently of API fetching pagination, respects shortcode filters and sorting, and gives each table its own page parameter.<\/p>\n\n<p>Frontend rendering reads synchronized records from the local WordPress database. It does not contact the configured API during the page request.<\/p>\n\n<h4>Upgrading existing installations<\/h4>\n\n<p>Existing source records and synchronized database tables are preserved. Existing wp_api_table_sync shortcodes in page content and text widgets are translated during rendering. For PHP templates or direct do_shortcode calls, use cws_api_table_sync.<\/p>\n\n<h4>External Services and Privacy<\/h4>\n\n<p>CWS API Table Sync connects to API endpoint URLs explicitly configured by a site administrator.<\/p>\n\n<p>When a connection is tested, inspected, or synchronized, WordPress sends an HTTP request to the configured external API. Depending on the API and the administrator's configuration, that request can include authentication credentials such as a Bearer token, Basic Authentication credentials, or a custom API-key header.<\/p>\n\n<p>The plugin does not send plugin usage telemetry to Cameron Web Services and does not contact a Cameron Web Services service as part of normal operation.<\/p>\n\n<p>The configured external API is a third-party service chosen by the site administrator. Its privacy policy, terms, data handling, availability, and usage limits are controlled by that API provider. Site administrators are responsible for ensuring that their use of an API and synchronized data complies with the provider's terms and applicable privacy requirements.<\/p>\n\n<p>API credentials are stored in the site's WordPress database as part of the source configuration. They are not copied into synchronized record data or rendered on the frontend.<\/p>\n\n<h4>Data Removal<\/h4>\n\n<p>Deactivating CWS API Table Sync preserves its configuration and synchronized data.<\/p>\n\n<p>By default, deleting the plugin also preserves its data. Administrators can explicitly enable \"Delete all plugin data when the plugin is deleted\" under CWS API Table Sync &gt; Settings. When enabled, uninstall cleanup removes plugin-owned source metadata, synchronized data tables, plugin settings, transients, and the scheduled synchronization event.<\/p>\n\n<!--section=installation-->\n<ol>\n<li>Upload the cws-api-table-sync folder to \/wp-content\/plugins\/, or install the plugin ZIP using Plugins &gt; Add Plugin &gt; Upload Plugin.<\/li>\n<li>Activate CWS API Table Sync under Plugins.<\/li>\n<li>No account or licence is required.<\/li>\n<li>Open CWS API Table Sync &gt; Sources and follow the five setup sections described above.<\/li>\n<li>Add [cws_api_table_sync] to a Shortcode block and view the page after a successful synchronization.<\/li>\n<\/ol>\n\n<p>Requires WordPress 6.4 or later and PHP 8.0 or later. Your server must be able to reach your configured API endpoint. Scheduled synchronization uses WordPress cron, which depends on site traffic unless your host runs it on a schedule.<\/p>\n\n<!--section=faq-->\n<dl>\n<dt id=\"do%20i%20need%20an%20account%20or%20licence%3F\"><h3>Do I need an account or licence?<\/h3><\/dt>\n<dd><p>No. All included features work without an account or licence.<\/p><\/dd>\n<dt id=\"does%20the%20shortcode%20call%20the%20external%20api%20when%20a%20visitor%20loads%20the%20page%3F\"><h3>Does the shortcode call the external API when a visitor loads the page?<\/h3><\/dt>\n<dd><p>No. The shortcode reads previously synchronized data from the local WordPress database.<\/p><\/dd>\n<dt id=\"does%20the%20plugin%20store%20api%20data%20as%20wordpress%20posts%20or%20post%20meta%3F\"><h3>Does the plugin store API data as WordPress posts or post meta?<\/h3><\/dt>\n<dd><p>No. Mapped API data is stored in plugin-owned custom database tables.<\/p><\/dd>\n<dt id=\"can%20i%20use%20an%20api%20that%20requires%20authentication%3F\"><h3>Can I use an API that requires authentication?<\/h3><\/dt>\n<dd><p>Yes. The current version supports Bearer tokens, Basic Authentication, and custom authentication headers\/API keys.<\/p><\/dd>\n<dt id=\"what%20happens%20if%20i%20deactivate%20the%20plugin%3F\"><h3>What happens if I deactivate the plugin?<\/h3><\/dt>\n<dd><p>Persistent configuration and synchronized data are retained. The scheduled synchronization event is cleared while the plugin is inactive.<\/p><\/dd>\n<dt id=\"can%20the%20plugin%20delete%20its%20data%20when%20removed%3F\"><h3>Can the plugin delete its data when removed?<\/h3><\/dt>\n<dd><p>Yes, but only when the administrator explicitly enables the data-removal option in Settings before deleting the plugin.<\/p><\/dd>\n\n<\/dl>\n\n<!--section=changelog-->\n<h4>1.5.3<\/h4>\n\n<ul>\n<li>Add side spacing to the dashboard preview record count and pagination buttons.<\/li>\n<\/ul>\n\n<h4>1.5.2<\/h4>\n\n<ul>\n<li>Show the synchronized source after submitting Sync Now without JavaScript.<\/li>\n<li>Complete opt-in uninstall cleanup of synchronization locks, legacy settings, transients, and administrator dashboard preferences.<\/li>\n<\/ul>\n\n<h4>1.5.1<\/h4>\n\n<ul>\n<li>Place the dashboard source selector above the summary and switch immediately on selection.<\/li>\n<li>Remember each administrator's dashboard source independently of the shortcode default.<\/li>\n<\/ul>\n\n<h4>1.5.0<\/h4>\n\n<ul>\n<li>Support multiple sources throughout configuration, synchronization, and rendering.<\/li>\n<li>Use distinctive CWSATS symbols and the cws_api_table_sync shortcode.<\/li>\n<li>Preserve existing source settings and synchronized database tables.<\/li>\n<li>Remove the optional sales SDK and exclude development files from distribution.<\/li>\n<\/ul>\n\n<h4>1.4.1<\/h4>\n\n<ul>\n<li>Update authentication labels and placeholders when the selected method changes.<\/li>\n<\/ul>","raw_excerpt":"Synchronize REST\/JSON API data into a fast local WordPress database table and render it without API calls on page loads.","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/ary.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin\/379111","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/ary.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin"}],"about":[{"href":"https:\/\/ary.wordpress.org\/plugins\/wp-json\/wp\/v2\/types\/plugin"}],"replies":[{"embeddable":true,"href":"https:\/\/ary.wordpress.org\/plugins\/wp-json\/wp\/v2\/comments?post=379111"}],"author":[{"embeddable":true,"href":"https:\/\/ary.wordpress.org\/plugins\/wp-json\/wporg\/v1\/users\/cameronwebservices"}],"wp:attachment":[{"href":"https:\/\/ary.wordpress.org\/plugins\/wp-json\/wp\/v2\/media?parent=379111"}],"wp:term":[{"taxonomy":"plugin_section","embeddable":true,"href":"https:\/\/ary.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_section?post=379111"},{"taxonomy":"plugin_tags","embeddable":true,"href":"https:\/\/ary.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_tags?post=379111"},{"taxonomy":"plugin_category","embeddable":true,"href":"https:\/\/ary.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_category?post=379111"},{"taxonomy":"plugin_contributors","embeddable":true,"href":"https:\/\/ary.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_contributors?post=379111"},{"taxonomy":"plugin_business_model","embeddable":true,"href":"https:\/\/ary.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_business_model?post=379111"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}