{"id":5,"date":"2026-08-24T08:52:50","date_gmt":"2026-08-24T08:52:50","guid":{"rendered":"https:\/\/xcrudnova.xcrud.net\/wordpress-demo\/xcrud-nova-in-wordpress\/"},"modified":"2026-08-24T08:53:03","modified_gmt":"2026-08-24T08:53:03","slug":"xcrud-nova-in-wordpress","status":"publish","type":"page","link":"https:\/\/xcrudnova.xcrud.net\/wordpress-demo\/","title":{"rendered":"xCRUD Nova in WordPress"},"content":{"rendered":"\n<h2 class=\"wp-block-heading\">xCRUD Nova in WordPress<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">This whole page is a real WordPress site. The grid below is a genuine xCRUD Nova widget, embedded with one shortcode \u2014 no login required to view it.<\/p>\n\n\n\n<div class=\"wp-block-columns alignwide is-layout-flex wp-container-core-columns-is-layout-794e3cfa wp-block-columns-is-layout-flex\">\n\n\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\" style=\"flex-basis:66%\">\n\n<div class=\"xcrud-nova-wp-embed\">\n            <link rel=\"preconnect\" href=\"https:\/\/fonts.googleapis.com\">\n            <link href=\"https:\/\/fonts.googleapis.com\/css2?family=Inter:wght@400;500;600;700&family=JetBrains+Mono:wght@400;500;600&display=swap\" rel=\"stylesheet\">\n            <script src=\"https:\/\/cdn.tailwindcss.com\"><\/script>\n            <script>tailwind.config = { theme: { extend: {\n                fontFamily: { sans: [\"Inter\",\"ui-sans-serif\",\"system-ui\"], mono: [\"JetBrains Mono\",\"ui-monospace\",\"monospace\"] },\n                colors: { brand: { 50:\"#f2f6ff\",100:\"#e6edff\",200:\"#c9d8ff\",300:\"#a3bcff\",400:\"#7a9cff\",500:\"#5b82f7\",600:\"#4468e0\",700:\"#3654b8\",800:\"#2c4494\",900:\"#25397a\" } },\n                boxShadow: { soft:\"0 1px 2px rgba(30,41,59,0.04), 0 8px 24px -12px rgba(30,41,59,0.10)\" }\n            } } }<\/script>\n            <style>.xcrud{font-family:\"Inter\",ui-sans-serif,sans-serif;}.xcrud-table-scroll{overflow-x:auto;-webkit-overflow-scrolling:touch;}body{font-variant-ligatures:none;-webkit-font-feature-settings:\"calt\" 0,\"liga\" 0;font-feature-settings:\"calt\" 0,\"liga\" 0;}@media(max-width:640px){.xcrud-tw-pagination-sticky{bottom:var(--app-bottom-tabs-space,0px);}.xcrud-tw-pagination-row{flex-wrap:nowrap;overflow-x:auto;}.xcrud-page-size-select{display:none;}}<\/style>\n<link rel=\"stylesheet\" href=\"assets\/custom.css\">\n\n\n\n\n<div id=\"xcrud-public-demo\" class=\"xcrud-mount\"><\/div>\n\n<script>\n    (function () {\n        \/\/ The mount div above is always emitted immediately\n        \/\/ before this script (same contiguous HTML block), so\n        \/\/ it already exists in the DOM by the time this runs -\n        \/\/ during a normal full page load (this script executing\n        \/\/ synchronously mid-parse, BEFORE the rest of the\n        \/\/ document has necessarily finished) AND when this\n        \/\/ exact markup gets injected dynamically well after\n        \/\/ the page's own DOMContentLoaded already fired once\n        \/\/ (xCRUD Pro's own AJAX in-place navigation - see\n        \/\/ XcrudMenu.php's own xcrudRunInlineScripts()). Only\n        \/\/ the FIRST case needs to actually wait for anything -\n        \/\/ document.readyState tells them apart: still\n        \/\/ \"loading\" only during that initial parse.\n        \/\/ Registering a DOMContentLoaded listener unconditionally\n        \/\/ (the old behavior) worked for that first case but\n        \/\/ silently never fired at all for the second - that\n        \/\/ event has already happened once and never fires\n        \/\/ again, so a widget injected after page load never\n        \/\/ mounted (the raw markup sat in the DOM inert, no\n        \/\/ rows\/data ever rendered, no error either).\n        function xcrudMountNow() {\n            Xcrud.mount('xcrud-public-demo', {\"table\":\"\",\"route\":\"public-demo\",\"demo\":true,\"query_mode\":true,\"read_only\":true,\"api\":\"https:\\\/\\\/xcrudnova.xcrud.net\\\/wordpress-demo\\\/wp-content\\\/plugins\\\/xcrud-nova\\\/core\\\/ajax_crud.php\",\"ui\":\"tailwind\",\"edit_mode\":\"modal\",\"edit_mode_explicit\":false,\"auto_open\":null,\"primary_key\":null,\"columns\":[\"orderNumber\",\"orderDate\",\"status\",\"customerName\",\"city\",\"country\"],\"editable\":[],\"labels\":{\"orderNumber\":\"Order Number\",\"orderDate\":\"Order Date\",\"status\":\"Status\",\"customerName\":\"Customer Name\",\"city\":\"City\",\"country\":\"Country\"},\"ui_text\":{\"add\":\"Add New\",\"edit\":\"Edit\",\"remove\":\"Delete\",\"view\":\"View\",\"save\":\"Save changes\",\"cancel\":\"Cancel\",\"close\":\"Close\",\"deleting_confirm\":\"Delete this record?\",\"no_records_found\":\"No records found\",\"showing\":\"Showing\",\"to\":\"to\",\"of\":\"of\",\"total_entries\":\"Total entries:\",\"bool_on\":\"Yes\",\"bool_off\":\"No\",\"search\":\"Search\",\"columns\":\"Columns\",\"wizard_next\":\"Next\",\"wizard_previous\":\"Back\"},\"field_types\":[],\"per_page\":10,\"per_page_options\":[10,25,50,100],\"intelligent_column_fit\":true,\"intelligent_column_arrangement\":true,\"header_search_default\":false,\"header_search_explicit\":false,\"inline_edit_enabled\":false,\"switch_text_fields\":[],\"column_visibility\":true,\"loading_indicator\":\"text\",\"order_by\":null,\"remove_confirm\":true,\"autocomplete_limit\":8,\"search_pattern\":\"%{term}%\",\"base_where\":\"\",\"base_where_sig\":\"\",\"where_tabs\":[],\"column_cut\":[],\"column_classes\":[],\"column_patterns\":[],\"column_tooltips\":[],\"column_widths\":[],\"highlights\":[],\"modal_columns\":[],\"sum_columns\":[],\"subselects\":\"\",\"subselects_sig\":\"\",\"disable_logic\":\"\",\"disable_logic_sig\":\"\",\"has_sql_disable_logic\":false,\"hide_logic\":\"\",\"hide_logic_sig\":\"\",\"has_sql_hide_logic\":false,\"buttons\":[],\"button_logic\":\"\",\"button_logic_sig\":\"\",\"has_sql_button_logic\":false,\"validation\":\"\",\"validation_sig\":\"\",\"relations\":\"\",\"relations_sig\":\"\",\"relation_fields\":[],\"galleries\":\"\",\"galleries_sig\":\"\",\"gallery_fields\":[],\"gallery_url\":\"https:\\\/\\\/xcrudnova.xcrud.net\\\/wordpress-demo\\\/wp-content\\\/plugins\\\/xcrud-nova\\\/core\\\/gallery.php\",\"upload_options\":\"\",\"upload_options_sig\":\"\",\"upload_url\":\"https:\\\/\\\/xcrudnova.xcrud.net\\\/wordpress-demo\\\/wp-content\\\/plugins\\\/xcrud-nova\\\/core\\\/upload.php\",\"upload_dir\":\"media\\\/\",\"media_url\":\"https:\\\/\\\/xcrudnova.xcrud.net\\\/wordpress-demo\\\/wp-content\\\/plugins\\\/xcrud-nova\\\/core\\\/images_handler.php\",\"upload_allowed_image_ext\":[\"jpg\",\"jpeg\",\"png\",\"gif\",\"webp\"],\"upload_allowed_file_ext\":[\"pdf\",\"doc\",\"docx\",\"xls\",\"xlsx\",\"ppt\",\"pptx\",\"txt\",\"csv\",\"zip\",\"mp3\",\"mp4\"],\"upload_allowed_video_ext\":[\"mp4\",\"webm\",\"ogg\"],\"field_groups\":[],\"field_group_order\":[],\"field_group_collapsed\":[],\"field_rows\":[],\"aside_fields\":[],\"form_fields\":[],\"form_tabs\":[],\"form_tab_order\":[],\"form_tabs_enabled\":false,\"form_tabs_position\":\"top\",\"nested_tables\":\"\",\"nested_tables_sig\":\"\",\"grid_clickable\":null,\"default_tab_label\":\"\",\"default_tab_order\":null,\"title_columns\":\"\",\"change_types\":[],\"readonly_fields\":[],\"disabled_fields\":[],\"pass_vars\":\"\",\"pass_vars_sig\":\"\",\"pass_defaults\":[],\"field_attrs\":[],\"field_tooltips\":[],\"conditions\":[],\"formulas\":[],\"group_by_columns\":[],\"group_sum_columns\":[],\"group_collapsed_default\":false,\"group_collapsed_levels\":{},\"group_sum_show_label\":true,\"group_sum_labels\":{},\"bulk_actions\":false,\"bulk_buttons\":[],\"intro\":null,\"empty_state_html\":null,\"add_button_name\":null,\"unset_add\":true,\"unset_edit\":true,\"unset_remove\":true,\"unset_view\":true,\"unset_view_code\":false,\"unset_search\":false,\"unset_pagination\":false,\"unset_limitlist\":false,\"button_position\":\"right\",\"button_style\":\"buttons\",\"button_style_text\":false,\"has_before_create\":false,\"field_callback_fields\":[],\"wizard\":\"\"});\n        }\n        if (document.readyState === 'loading') {\n            document.addEventListener('DOMContentLoaded', xcrudMountNow);\n        } else {\n            xcrudMountNow();\n        }\n    })();\n<\/script><\/div>\n\n\n<\/div>\n\n\n\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\" style=\"flex-basis:34%\">\n\n\n<h3 class=\"wp-block-heading\">How this was added to WordPress<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Copy the <code>xcrud-nova<\/code> plugin folder into <code>wp-content\/plugins\/<\/code> and activate it \u2014 nothing else to install.<\/li>\n<li>Point one file, <code>src\/Config.php<\/code>, at your database \u2014 independent of WordPress&#8217;s own, can be the same DB or a separate one.<\/li>\n<li>Write a normal PHP page under <code>pages\/<\/code>, exactly like a standalone xCRUD Nova deployment.<\/li>\n<li>Add one entry to <code>includes\/route-capabilities.php<\/code> saying who can see it.<\/li>\n<li>Drop <code><\/code> into any post or page.<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Why this grid is safe to show the public:<\/strong> it&#8217;s built with <code>Xcrud::query()<\/code>, a genuinely read-only request path \u2014 no table name ever reaches the browser, so there&#8217;s nothing for a stranger to write to, even in principle.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">An ordinary widget instead requires a real WordPress capability, enforced both when the page renders <em>and<\/em> on every data request the widget makes \u2014 not just a cosmetic show\/hide.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">No <code>eval()<\/code> anywhere in this plugin. Every widget is a real, version-controlled PHP file \u2014 never raw code typed into a post.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><a href=\"https:\/\/xcrudnova.xcrud.net\/docs\">Read the docs \u2192<\/a><\/p>\n\n\n<\/div>\n\n\n<\/div>\n\n","protected":false},"excerpt":{"rendered":"<p>xCRUD Nova in WordPress This whole page is a real WordPress site. The grid below is a genuine xCRUD Nova widget, embedded with one shortcode \u2014 no login required to view it. How this was added to WordPress Copy the xcrud-nova plugin folder into wp-content\/plugins\/ and activate it \u2014 nothing else to install. Point one [&hellip;]<\/p>\n","protected":false},"author":0,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"footnotes":""},"class_list":["post-5","page","type-page","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/xcrudnova.xcrud.net\/wordpress-demo\/wp-json\/wp\/v2\/pages\/5","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/xcrudnova.xcrud.net\/wordpress-demo\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/xcrudnova.xcrud.net\/wordpress-demo\/wp-json\/wp\/v2\/types\/page"}],"replies":[{"embeddable":true,"href":"https:\/\/xcrudnova.xcrud.net\/wordpress-demo\/wp-json\/wp\/v2\/comments?post=5"}],"version-history":[{"count":1,"href":"https:\/\/xcrudnova.xcrud.net\/wordpress-demo\/wp-json\/wp\/v2\/pages\/5\/revisions"}],"predecessor-version":[{"id":6,"href":"https:\/\/xcrudnova.xcrud.net\/wordpress-demo\/wp-json\/wp\/v2\/pages\/5\/revisions\/6"}],"wp:attachment":[{"href":"https:\/\/xcrudnova.xcrud.net\/wordpress-demo\/wp-json\/wp\/v2\/media?parent=5"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}