{"id":343234,"date":"2026-07-23T18:47:58","date_gmt":"2026-07-23T18:47:58","guid":{"rendered":"https:\/\/wordpress.org\/plugins\/wbs-dataverse-connect\/"},"modified":"2026-07-23T18:47:16","modified_gmt":"2026-07-23T18:47:16","slug":"wbs-connect-for-dataverse","status":"publish","type":"plugin","link":"https:\/\/wordpress.org\/plugins\/wbs-connect-for-dataverse\/","author":21170394,"comment_status":"closed","ping_status":"closed","template":"","meta":{"version":"1.0.0","stable_tag":"1.0.0","tested":"7.0.2","requires":"6.0","requires_php":"8.0","requires_plugins":null,"header_name":"WBS Connect for Dataverse","header_author":"WOODS Business Solutions","header_description":"Publish Microsoft Dataverse records as lists and detail views on your WordPress site, and write form submissions straight back into Dataverse tables.","assets_banners_color":"313131","last_updated":"2026-07-23 18:47:16","external_support_url":"","external_repository_url":"","donate_link":"","header_plugin_uri":"https:\/\/woods.consulting\/wbs-dataverse-connect-for-wordpress\/","header_author_uri":"https:\/\/woods.consulting","rating":0,"author_block_rating":0,"active_installs":0,"downloads":51,"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":"ztwoods","date":"2026-07-23 18:47:16"}},"upgrade_notice":{"1.0.0":"<p>Initial release.<\/p>"},"ratings":[],"assets_icons":{"icon-128x128.png":{"filename":"icon-128x128.png","revision":3620392,"resolution":"128x128","location":"assets","locale":"","width":128,"height":128},"icon-256x256.png":{"filename":"icon-256x256.png","revision":3620392,"resolution":"256x256","location":"assets","locale":"","width":256,"height":256}},"assets_banners":{"banner-1544x500.png":{"filename":"banner-1544x500.png","revision":3620392,"resolution":"1544x500","location":"assets","locale":"","width":1544,"height":500},"banner-772x250.png":{"filename":"banner-772x250.png","revision":3620392,"resolution":"772x250","location":"assets","locale":"","width":772,"height":250}},"assets_blueprints":{},"all_blocks":[],"tagged_versions":["1.0.0"],"block_files":[],"assets_screenshots":{"screenshot-1.png":{"filename":"screenshot-1.png","revision":3620392,"resolution":"1","location":"assets","locale":"","width":2240,"height":2106},"screenshot-2.png":{"filename":"screenshot-2.png","revision":3620392,"resolution":"2","location":"assets","locale":"","width":1880,"height":2702},"screenshot-3.png":{"filename":"screenshot-3.png","revision":3620392,"resolution":"3","location":"assets","locale":"","width":2400,"height":1734},"screenshot-4.png":{"filename":"screenshot-4.png","revision":3620392,"resolution":"4","location":"assets","locale":"","width":2400,"height":2474},"screenshot-5.png":{"filename":"screenshot-5.png","revision":3620392,"resolution":"5","location":"assets","locale":"","width":2400,"height":2360}},"screenshots":{"1":"Collection grid rendered by [wbsdvc_collection].","2":"Record detail view with an attached write-back form.","3":"Connection settings with wp-config constant lock and connection test.","4":"Collections management.","5":"Form (write-back) management."}},"plugin_section":[],"plugin_tags":[1150,196123,131881,597,3883],"plugin_category":[58],"plugin_contributors":[273029],"plugin_business_model":[],"class_list":["post-343234","plugin","type-plugin","status-publish","hentry","plugin_tags-crm","plugin_tags-dataverse","plugin_tags-dynamics-365","plugin_tags-integration","plugin_tags-microsoft","plugin_category-user-management","plugin_contributors-ztwoods","plugin_committers-ztwoods"],"banners":{"banner":"https:\/\/ps.w.org\/wbs-connect-for-dataverse\/assets\/banner-772x250.png?rev=3620392","banner_2x":"https:\/\/ps.w.org\/wbs-connect-for-dataverse\/assets\/banner-1544x500.png?rev=3620392","banner_rtl":false,"banner_2x_rtl":false},"icons":{"svg":false,"icon":"https:\/\/ps.w.org\/wbs-connect-for-dataverse\/assets\/icon-128x128.png?rev=3620392","icon_2x":"https:\/\/ps.w.org\/wbs-connect-for-dataverse\/assets\/icon-256x256.png?rev=3620392","generated":false},"screenshots":[{"src":"https:\/\/ps.w.org\/wbs-connect-for-dataverse\/assets\/screenshot-1.png?rev=3620392","caption":"Collection grid rendered by [wbsdvc_collection]."},{"src":"https:\/\/ps.w.org\/wbs-connect-for-dataverse\/assets\/screenshot-2.png?rev=3620392","caption":"Record detail view with an attached write-back form."},{"src":"https:\/\/ps.w.org\/wbs-connect-for-dataverse\/assets\/screenshot-3.png?rev=3620392","caption":"Connection settings with wp-config constant lock and connection test."},{"src":"https:\/\/ps.w.org\/wbs-connect-for-dataverse\/assets\/screenshot-4.png?rev=3620392","caption":"Collections management."},{"src":"https:\/\/ps.w.org\/wbs-connect-for-dataverse\/assets\/screenshot-5.png?rev=3620392","caption":"Form (write-back) management."}],"raw_content":"<!--section=description-->\n<p>WBS Connect for Dataverse turns a WordPress site into a front end for your own Microsoft Dataverse (or Dynamics 365) environment. Records from any Dataverse table render as card grids and detail pages via shortcodes, and site forms create records directly in Dataverse. The data stays in Dataverse; only the presentation layer lives in WordPress.<\/p>\n\n<p><strong>Features<\/strong><\/p>\n\n<ul>\n<li><strong>Collections.<\/strong> Publish any Dataverse table by naming the table, the columns and an optional status filter. No code required; developers can also register collections via a filter.<\/li>\n<li><strong>Grid and detail on one page.<\/strong> <code>[wbsdvc_collection]<\/code> renders the card grid, and the same page renders the detail view when a record is selected, so links stay short.<\/li>\n<li><strong>Clean detail URLs.<\/strong> Point a collection at a slug column and detail links use readable slugs (<code>?dvc=my-record<\/code>) instead of raw record ids. Id links keep working as a fallback.<\/li>\n<li><strong>Write-back forms.<\/strong> Map form fields to columns of any table; submissions create records in Dataverse, optionally related to the record the form was shown on. Every submission is nonce-verified, honeypot-checked and rate limited.<\/li>\n<li><strong>Server-side authentication.<\/strong> The plugin signs in with an Entra ID app registration (client-credentials flow) and a Dataverse application user with a least-privilege role. Credentials never reach the browser; <code>wp-config.php<\/code> constants are the recommended home for them.<\/li>\n<li><strong>Caching and fail-open.<\/strong> Reads are cached with a configurable TTL. When Dataverse is unreachable, pages show a friendly notice instead of failing; the site never goes blank.<\/li>\n<li><strong>Display-ready values.<\/strong> Choices, money, dates and lookups arrive formatted by Dataverse itself, in the environment's locale.<\/li>\n<li><strong>Themeable.<\/strong> All output runs through templates a theme can override, so markup, classes and SEO belong to the site owner.<\/li>\n<\/ul>\n\n<p><strong>Requirements<\/strong><\/p>\n\n<ul>\n<li>PHP 8.0 or newer, WordPress 6.0 or newer.<\/li>\n<li>Access to a working Microsoft Dataverse or Dynamics 365 environment is required. Without one the plugin has no function. Free developer environments are available from Microsoft: <a href=\"https:\/\/learn.microsoft.com\/power-platform\/developer\/plan\">https:\/\/learn.microsoft.com\/power-platform\/developer\/plan<\/a><\/li>\n<\/ul>\n\n<p><strong>External services<\/strong><\/p>\n\n<p>This plugin connects to two external services, both operated by Microsoft and both belonging to you, the site owner. Data flows only between your WordPress host and your own Microsoft tenant's endpoints; nothing is sent to WOODS Business Solutions or any other third party, and the plugin contains no telemetry.<\/p>\n\n<ol>\n<li><strong>Microsoft Entra ID token endpoint<\/strong> (<code>login.microsoftonline.com<\/code>). The plugin requests OAuth2 access tokens here using the tenant id, client id and client secret you configure. This happens whenever a cached token has expired.<\/li>\n<li><strong>Your Microsoft Dataverse environment<\/strong> (the <code>*.dynamics.com<\/code> URL you configure, for example <code>https:\/\/yourorg.crm4.dynamics.com<\/code>). The plugin reads the records you chose to publish and creates the records your visitors submit through configured forms (typically a name, email address, phone number and message). This happens on page views of pages using the shortcodes (subject to caching) and on form submissions.<\/li>\n<\/ol>\n\n<p>These services are governed by Microsoft's terms and privacy statement:<\/p>\n\n<ul>\n<li>Terms: <a href=\"https:\/\/www.microsoft.com\/licensing\/terms\">https:\/\/www.microsoft.com\/licensing\/terms<\/a><\/li>\n<li>Privacy: <a href=\"https:\/\/privacy.microsoft.com\/privacystatement\">https:\/\/privacy.microsoft.com\/privacystatement<\/a><\/li>\n<\/ul>\n\n<p>WOODS Business Solutions is an independent company and is not affiliated with, endorsed by or sponsored by Microsoft. Dataverse, Dynamics 365 and Microsoft are trademarks of the Microsoft group of companies, used here solely to describe compatibility.<\/p>\n\n<!--section=installation-->\n<ol>\n<li>Install and activate the plugin.<\/li>\n<li>In the Entra admin center, create an app registration (no redirect URI needed) and a client secret.<\/li>\n<li>In the Power Platform admin center, create an application user for that app registration in your environment and assign it a least-privilege security role: Read on the tables you publish, Create on the tables your forms write to. Do not use System Administrator.<\/li>\n<li>Enter tenant id, client id, client secret and environment URL under Settings, Dataverse Connect, or define them as <code>WBS_DATAVERSE_CONNECT_TENANT_ID<\/code>, <code>WBS_DATAVERSE_CONNECT_CLIENT_ID<\/code>, <code>WBS_DATAVERSE_CONNECT_CLIENT_SECRET<\/code> and <code>WBS_DATAVERSE_CONNECT_ENV_URL<\/code> in <code>wp-config.php<\/code> (recommended).<\/li>\n<li>Run \"Test connection\" on the settings page.<\/li>\n<li>Add a collection on the Collections tab and put <code>[wbsdvc_collection name=\"&lt;key&gt;\"]<\/code> on a page.<\/li>\n<\/ol>\n\n<!--section=faq-->\n<dl>\n<dt id=\"do%20i%20need%20my%20own%20dataverse%20environment%3F\"><h3>Do I need my own Dataverse environment?<\/h3><\/dt>\n<dd><p>Yes. The plugin is a front end for an environment you already own and administer; it ships with no data and no Microsoft account. Free developer environments are available from Microsoft at <a href=\"https:\/\/learn.microsoft.com\/power-platform\/developer\/plan\">https:\/\/learn.microsoft.com\/power-platform\/developer\/plan<\/a>.<\/p><\/dd>\n<dt id=\"how%20is%20this%20different%20from%20microsoft%20power%20pages%3F\"><h3>How is this different from Microsoft Power Pages?<\/h3><\/dt>\n<dd><p>Power Pages is Microsoft's hosted portal product with per-user and per-page-view licensing. This plugin serves the same Dataverse data from your own WordPress site on standard hosting, through the official Dataverse Web API. Dataverse remains the single source of truth; only the front end moves to WordPress.<\/p><\/dd>\n<dt id=\"does%20woods%20business%20solutions%20see%20my%20data%3F\"><h3>Does WOODS Business Solutions see my data?<\/h3><\/dt>\n<dd><p>No. Your WordPress site talks directly to your own Microsoft endpoints (<code>login.microsoftonline.com<\/code> and your environment's <code>*.dynamics.com<\/code> URL). Nothing is sent to us, and the plugin contains no tracking or telemetry of any kind.<\/p><\/dd>\n<dt id=\"where%20do%20my%20credentials%20live%3F\"><h3>Where do my credentials live?<\/h3><\/dt>\n<dd><p>Preferably as constants in <code>wp-config.php<\/code>, which lock the matching settings fields and keep the secret out of the database entirely. Alternatively the settings page stores them in the WordPress options table; the secret is never displayed again after saving. Credentials are only ever used server-side and never reach the browser.<\/p><\/dd>\n<dt id=\"what%20data%20leaves%20my%20site%3F\"><h3>What data leaves my site?<\/h3><\/dt>\n<dd><p>Two things, both to your own Microsoft tenant: the configured credentials during token requests to <code>login.microsoftonline.com<\/code>, and the data of form submissions (the fields you mapped, typically name, email, phone and message) written to your Dataverse environment. Record data flows the other way, from your environment to your site. No other external requests are made.<\/p><\/dd>\n<dt id=\"does%20it%20work%20with%20any%20table%3F\"><h3>Does it work with any table?<\/h3><\/dt>\n<dd><p>Any table the application user can read, standard or custom. A collection needs the table's logical name, its entity set name, a name column and the columns to display. Writes work against any table the application user may create records in, with values mapped to text columns; typed columns can be handled via a developer filter.<\/p><\/dd>\n<dt id=\"are%20the%20templates%20customizable%3F\"><h3>Are the templates customizable?<\/h3><\/dt>\n<dd><p>Yes. Copy any file from the plugin's <code>templates\/<\/code> directory into <code>&lt;your-theme&gt;\/wbs-connect-for-dataverse\/<\/code> and edit the copy; the theme version wins, and child themes work too.<\/p><\/dd>\n\n<\/dl>\n\n<!--section=changelog-->\n<h4>1.0.0<\/h4>\n\n<ul>\n<li>Initial release: collections (grid and detail shortcodes for any Dataverse table), write-back forms with field mapping and lookup binding, server-side Entra ID auth, response caching with fail-open behavior, theme-overridable templates.<\/li>\n<\/ul>","raw_excerpt":"Show Microsoft Dataverse records as lists and detail pages on your WordPress site, and write form submissions straight back into Dataverse.","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin\/343234","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin"}],"about":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/types\/plugin"}],"replies":[{"embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/comments?post=343234"}],"author":[{"embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wporg\/v1\/users\/ztwoods"}],"wp:attachment":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/media?parent=343234"}],"wp:term":[{"taxonomy":"plugin_section","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_section?post=343234"},{"taxonomy":"plugin_tags","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_tags?post=343234"},{"taxonomy":"plugin_category","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_category?post=343234"},{"taxonomy":"plugin_contributors","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_contributors?post=343234"},{"taxonomy":"plugin_business_model","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_business_model?post=343234"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}