{"id":300452,"date":"2026-10-20T06:54:52","date_gmt":"2026-10-20T06:54:52","guid":{"rendered":"https:\/\/wordpress.org\/plugins\/hi-theme-toolkit\/"},"modified":"2026-10-20T06:54:24","modified_gmt":"2026-10-20T06:54:24","slug":"hi-theme-toolkit","status":"publish","type":"plugin","link":"https:\/\/wordpress.org\/plugins\/hi-theme-toolkit\/","author":20824258,"comment_status":"closed","ping_status":"closed","template":"","meta":{"version":"3.0.0","stable_tag":"3.0.0","tested":"7.1.3","requires":"6.8","requires_php":"8.0","requires_plugins":null,"header_name":"HI Theme Toolkit","header_author":"Hawaii Interactive","header_description":"A developer toolkit for building WordPress themes \u2014 provides base models, ACF block registration, custom post types, taxonomies, REST API helpers, and utility services.","assets_banners_color":"44494b","last_updated":"2026-10-20 06:54:24","external_support_url":"","external_repository_url":"","donate_link":"","header_plugin_uri":"","header_author_uri":"https:\/\/hawaii.do","rating":0,"author_block_rating":0,"active_installs":0,"downloads":44,"num_ratings":0,"support_threads":0,"support_threads_resolved":0,"author_block_count":0,"sections":["description","installation","faq","changelog"],"tags":{"3.0.0":{"tag":"3.0.0","author":"hawaiido","date":"2026-10-20 06:54:24","revision":3756016}},"upgrade_notice":{"3.0.0":"<p>Major release. Full WordPress coding standards compliance, security overhaul (encryption key no longer modifies wp-config.php), and new ACF helpers for the Block model. Review your theme&#039;s Block subclasses after upgrading.<\/p>","2.1.5":"<p>Security improvements: nonce protection and data sanitization added. Update recommended for all users.<\/p>"},"ratings":[],"assets_icons":{"icon-128x128.png":{"filename":"icon-128x128.png","revision":3756016,"resolution":"128x128","location":"assets","locale":"","width":128,"height":128},"icon-256x256.png":{"filename":"icon-256x256.png","revision":3756016,"resolution":"256x256","location":"assets","locale":"","width":256,"height":256}},"assets_banners":{"banner-1544x500.png":{"filename":"banner-1544x500.png","revision":3756016,"resolution":"1544x500","location":"assets","locale":"","width":1544,"height":500},"banner-772x250.png":{"filename":"banner-772x250.png","revision":3756016,"resolution":"772x250","location":"assets","locale":"","width":772,"height":250}},"assets_blueprints":{},"all_blocks":[],"tagged_versions":["3.0.0"],"block_files":[],"assets_screenshots":{"screenshot-1.png":{"filename":"screenshot-1.png","revision":3756016,"resolution":"1","location":"assets","locale":"","width":1718,"height":1110},"screenshot-2.png":{"filename":"screenshot-2.png","revision":3756016,"resolution":"2","location":"assets","locale":"","width":1718,"height":1110},"screenshot-3.png":{"filename":"screenshot-3.png","revision":3756016,"resolution":"3","location":"assets","locale":"","width":1718,"height":1110},"screenshot-4.png":{"filename":"screenshot-4.png","revision":3756016,"resolution":"4","location":"assets","locale":"","width":1718,"height":1110},"screenshot-5.png":{"filename":"screenshot-5.png","revision":3756016,"resolution":"5","location":"assets","locale":"","width":1718,"height":1110},"screenshot-6.png":{"filename":"screenshot-6.png","revision":3756016,"resolution":"6","location":"assets","locale":"","width":2678,"height":1476},"screenshot-7.png":{"filename":"screenshot-7.png","revision":3756016,"resolution":"7","location":"assets","locale":"","width":2678,"height":1476},"screenshot-8.png":{"filename":"screenshot-8.png","revision":3756016,"resolution":"8","location":"assets","locale":"","width":2678,"height":1476},"screenshot-9.png":{"filename":"screenshot-9.png","revision":3756016,"resolution":"9","location":"assets","locale":"","width":2678,"height":1476}},"screenshots":{"1":"Documentation viewer \u2014 browse Markdown docs from the plugin's <code>\/docs<\/code> folder, organized by section with collapsible categories.","2":"Toolkit dashboard \u2014 theme details, maintenance mode toggle, cookie consent, Google Calendar, and file upload size settings.","3":"Hide menu items \u2014 clean up the WordPress admin sidebar for clients by toggling off unused menu entries.","4":"Model manager \u2014 enable\/disable registered custom post types and scaffold new CPT model files directly from the admin.","5":"API Authentication \u2014 generate an encryption key, create a master token, manage transient token expiry, and configure IP whitelisting.","6":"WebP optimization \u2014 test results showing files created and space saved, with a bulk rebuild tool that queues all images for background cron processing.","7":"Link WordPress Events \u2014 map any public custom post type and its ACF date field (including repeater sub-fields) to calendar events, with a count of all available fields.","8":"Calendar dashboard \u2014 at-a-glance status of Google Calendar and WordPress Events sync, published event count, last sync time, and quick-action buttons.","9":"Calendar Settings \u2014 Google Calendar configuration: API key, Calendar ID, sync interval, maximum events, and past\/future date-range offsets."}},"plugin_section":[],"plugin_tags":[2211,1794,2275,1141,11238],"plugin_category":[59],"plugin_contributors":[287628],"plugin_business_model":[],"class_list":["post-300452","plugin","type-plugin","status-publish","hentry","plugin_tags-acf","plugin_tags-custom-post-type","plugin_tags-developer","plugin_tags-theme","plugin_tags-toolkit","plugin_category-utilities-and-tools","plugin_contributors-hawaiido","plugin_committers-hawaiido"],"banners":{"banner":"https:\/\/ps.w.org\/hi-theme-toolkit\/assets\/banner-772x250.png?rev=3756016","banner_2x":"https:\/\/ps.w.org\/hi-theme-toolkit\/assets\/banner-1544x500.png?rev=3756016","banner_rtl":false,"banner_2x_rtl":false},"icons":{"svg":false,"icon":"https:\/\/ps.w.org\/hi-theme-toolkit\/assets\/icon-128x128.png?rev=3756016","icon_2x":"https:\/\/ps.w.org\/hi-theme-toolkit\/assets\/icon-256x256.png?rev=3756016","generated":false},"screenshots":[{"src":"https:\/\/ps.w.org\/hi-theme-toolkit\/assets\/screenshot-1.png?rev=3756016","caption":"Documentation viewer \u2014 browse Markdown docs from the plugin's <code>\/docs<\/code> folder, organized by section with collapsible categories."},{"src":"https:\/\/ps.w.org\/hi-theme-toolkit\/assets\/screenshot-2.png?rev=3756016","caption":"Toolkit dashboard \u2014 theme details, maintenance mode toggle, cookie consent, Google Calendar, and file upload size settings."},{"src":"https:\/\/ps.w.org\/hi-theme-toolkit\/assets\/screenshot-3.png?rev=3756016","caption":"Hide menu items \u2014 clean up the WordPress admin sidebar for clients by toggling off unused menu entries."},{"src":"https:\/\/ps.w.org\/hi-theme-toolkit\/assets\/screenshot-4.png?rev=3756016","caption":"Model manager \u2014 enable\/disable registered custom post types and scaffold new CPT model files directly from the admin."},{"src":"https:\/\/ps.w.org\/hi-theme-toolkit\/assets\/screenshot-5.png?rev=3756016","caption":"API Authentication \u2014 generate an encryption key, create a master token, manage transient token expiry, and configure IP whitelisting."},{"src":"https:\/\/ps.w.org\/hi-theme-toolkit\/assets\/screenshot-6.png?rev=3756016","caption":"WebP optimization \u2014 test results showing files created and space saved, with a bulk rebuild tool that queues all images for background cron processing."},{"src":"https:\/\/ps.w.org\/hi-theme-toolkit\/assets\/screenshot-7.png?rev=3756016","caption":"Link WordPress Events \u2014 map any public custom post type and its ACF date field (including repeater sub-fields) to calendar events, with a count of all available fields."},{"src":"https:\/\/ps.w.org\/hi-theme-toolkit\/assets\/screenshot-8.png?rev=3756016","caption":"Calendar dashboard \u2014 at-a-glance status of Google Calendar and WordPress Events sync, published event count, last sync time, and quick-action buttons."},{"src":"https:\/\/ps.w.org\/hi-theme-toolkit\/assets\/screenshot-9.png?rev=3756016","caption":"Calendar Settings \u2014 Google Calendar configuration: API key, Calendar ID, sync interval, maximum events, and past\/future date-range offsets."}],"raw_content":"<!--section=description-->\n<p>HI Theme Toolkit gives developers a structured foundation for building robust, maintainable WordPress themes. Rather than reinventing common patterns on every project, WP Theme Toolkit provides a consistent architecture out of the box.<\/p>\n\n<p><strong>Features:<\/strong><\/p>\n\n<ul>\n<li>Abstract base models for posts, pages, media, galleries, and custom post types<\/li>\n<li>ACF-powered block and option page registration<\/li>\n<li>Custom post type and taxonomy scaffolding<\/li>\n<li>REST API routing with token-based authentication<\/li>\n<li>Utility services: asset loading (Vite), menus, navigation, image resizing (WebP), cookie consent<\/li>\n<li>Google Calendar integration with admin dashboard, configurable sync settings (API key, Calendar ID, interval, date range, max events), and live connection testing<\/li>\n<li>WordPress CPT-to-calendar mapping: link any public custom post type with an ACF date field (including dates inside repeaters) to calendar events<\/li>\n<li>WooCommerce optional support<\/li>\n<li>Maintenance mode view<\/li>\n<li>Gravity Forms integration helpers<\/li>\n<li>WPML compatibility helpers<\/li>\n<\/ul>\n\n<p>This plugin is designed to work alongside a custom theme, not replace it. It is intended for developers building bespoke WordPress themes.<\/p>\n\n<p>To start a new project, use the official boilerplate: <a href=\"https:\/\/github.com\/Hawaii-Interactive-CH\/wordpress-toolkit-boilerplate\">wordpress-toolkit-boilerplate<\/a><\/p>\n\n<h3>External Services<\/h3>\n\n<p>This plugin may connect to the following external services depending on your configuration:<\/p>\n\n<ul>\n<li><strong>Google Calendar API<\/strong> \u2014 used by <code>GoogleCalendarSource<\/code> to fetch calendar events. This connection is only made when the Google Calendar integration is configured and active. See <a href=\"https:\/\/policies.google.com\/privacy\">Google's Privacy Policy<\/a>.<\/li>\n<\/ul>\n\n<p>No data is sent to any external service by default. External connections are opt-in and initiated by your theme code.<\/p>\n\n<h3>Third-Party Libraries<\/h3>\n\n<p>This plugin includes the following third-party libraries:<\/p>\n\n<ul>\n<li><strong>Highlight.js<\/strong> v11.12.0 \u2014 Syntax highlighter by Josh Goebel and contributors, used in the admin Docs page to highlight code blocks. Licensed under the BSD 3-Clause License. <a href=\"https:\/\/github.com\/highlightjs\/highlight.js\">Source<\/a>. Bundled locally in <code>admin\/assets\/<\/code>, no external request is made.<\/li>\n<\/ul>\n\n<!--section=installation-->\n<ol>\n<li>Upload the <code>wordpress-toolkit-plugin<\/code> folder to the <code>\/wp-content\/plugins\/<\/code> directory, or install the plugin through the WordPress plugin screen directly.<\/li>\n<li>Activate the plugin through the <strong>Plugins<\/strong> screen in WordPress.<\/li>\n<li>The toolkit registers its services automatically on <code>init<\/code>. Configure your theme to extend the base models and register your blocks, CPTs, and taxonomies.<\/li>\n<\/ol>\n\n<!--section=faq-->\n<dl>\n<dt id=\"does%20this%20plugin%20work%20without%20acf%3F\"><h3>Does this plugin work without ACF?<\/h3><\/dt>\n<dd><p>Some features (block registration, option pages) require Advanced Custom Fields (ACF) or ACF Pro. The plugin will not throw fatal errors if ACF is absent, but those features will be unavailable.<\/p><\/dd>\n<dt id=\"does%20this%20plugin%20work%20without%20a%20custom%20theme%3F\"><h3>Does this plugin work without a custom theme?<\/h3><\/dt>\n<dd><p>HI Theme Toolkit is designed to complement a custom theme. It will activate on any theme but most features are only useful when your theme extends the provided base models.<\/p><\/dd>\n<dt id=\"is%20woocommerce%20support%20enabled%20by%20default%3F\"><h3>Is WooCommerce support enabled by default?<\/h3><\/dt>\n<dd><p>No. WooCommerce support is disabled by default and can be enabled via the plugin configuration file.<\/p><\/dd>\n\n<\/dl>\n\n<!--section=changelog-->\n<h4>3.0.0<\/h4>\n\n<ul>\n<li>Security: Encryption key is now stored in wp_options \u2014 no longer writes to wp-config.php<\/li>\n<li>Security: Fixed bug where get_encryption_key() returned a boolean instead of the actual key value<\/li>\n<li>Security: All inline &lt;script&gt; and &lt;style&gt; tags replaced with wp_add_inline_script() and wp_add_inline_style()<\/li>\n<li>Security: Nonce protection added across admin form submissions<\/li>\n<li>Security: Improved data sanitization and output escaping throughout<\/li>\n<li>Security: Removed third-party update checker<\/li>\n<li>Feat: Block model \u2014 new ACF helpers: acf_media(), acf_file(), acf_post(), acf_page(), acf_publication()<\/li>\n<li>Compatibility: Full WordPress coding standards compliance across all models, controllers, and services<\/li>\n<li>Compatibility: Removed unused vendor\/jb-fly library<\/li>\n<li>Compatibility: Added if(!defined()) guards for all plugin constants<\/li>\n<li>Compatibility: Plugin name and text domain unified to wordpress-toolkit-plugin<\/li>\n<li>Compatibility: Disclosed Highlight.js external CDN usage in readme.txt<\/li>\n<li>Docs: English translation of internal documentation and file names<\/li>\n<li>Docs: GPL license file added<\/li>\n<li>Docs: Code conventions documented<\/li>\n<\/ul>\n\n<h4>2.1.6<\/h4>\n\n<ul>\n<li>Add calendar CPT handling<\/li>\n<li>Add WPML support for calendar events and upcoming period sorting<\/li>\n<li>Add ACF helper functions for blocks<\/li>\n<\/ul>\n\n<h4>2.1.5<\/h4>\n\n<ul>\n<li>Security: Added nonce protection<\/li>\n<li>Security: Improved data sanitization<\/li>\n<\/ul>\n\n<h4>2.1.4<\/h4>\n\n<ul>\n<li>Feat: Add <code>add_columns()<\/code> helper to CustomPostType for admin list columns with sorting support<\/li>\n<li>Feat: Add <code>remove_columns()<\/code> helper to CustomPostType to hide admin list columns<\/li>\n<li>Feat: Add <code>MainService::customize_login()<\/code> to customize wp-login.php logo, background and button color<\/li>\n<\/ul>\n\n<h4>2.1.3<\/h4>\n\n<ul>\n<li>Fix: Better WebP conversion<\/li>\n<\/ul>\n\n<h4>2.0.0<\/h4>\n\n<ul>\n<li>Feat: Add Google Calendar integration<\/li>\n<li>Feat: Convert PNG to WebP using WP cron<\/li>\n<\/ul>\n\n<h4>1.9.2<\/h4>\n\n<ul>\n<li>Fix: Remove duplicate cookie register by default<\/li>\n<\/ul>\n\n<h4>1.9.1<\/h4>\n\n<ul>\n<li>Fix: Correct asset paths for fonts<\/li>\n<\/ul>\n\n<h4>1.9.0<\/h4>\n\n<ul>\n<li>Feat: Rewrite assets loading to use Vite<\/li>\n<\/ul>\n\n<h4>1.8.4<\/h4>\n\n<ul>\n<li>Fix: Block CSS<\/li>\n<\/ul>\n\n<h4>1.8.3<\/h4>\n\n<ul>\n<li>Fix: Typo in import<\/li>\n<\/ul>\n\n<h4>1.8.2<\/h4>\n\n<ul>\n<li>Fix: Correctly load block themes in editor<\/li>\n<\/ul>\n\n<h4>1.8.1<\/h4>\n\n<ul>\n<li>Fix: Exclude SVG, AVIF, HEIC, HEIF from image resize<\/li>\n<\/ul>\n\n<h4>1.8.0<\/h4>\n\n<ul>\n<li>Feat: Add support for wp-i18n in JS scripts<\/li>\n<\/ul>\n\n<h4>1.7.3<\/h4>\n\n<ul>\n<li>Fix: CPT creation<\/li>\n<\/ul>\n\n<h4>1.7.2<\/h4>\n\n<ul>\n<li>Fix: Asset URL path for block.css<\/li>\n<\/ul>\n\n<h4>1.7.1<\/h4>\n\n<ul>\n<li>Fix: Add blocks.css to display custom block styles in admin<\/li>\n<\/ul>\n\n<h4>1.7.0<\/h4>\n\n<ul>\n<li>Feat: Add category support for media files<\/li>\n<\/ul>\n\n<h4>1.6.6<\/h4>\n\n<ul>\n<li>Fix: Remove default custom CPT, keep only those defined in the theme<\/li>\n<\/ul>\n\n<h4>1.6.5<\/h4>\n\n<ul>\n<li>Fix: Typo<\/li>\n<\/ul>\n\n<h4>1.6.3<\/h4>\n\n<ul>\n<li>Fix: SVG size processing<\/li>\n<\/ul>\n\n<h4>1.6.0<\/h4>\n\n<ul>\n<li>Feat: Add WebP support for image upload<\/li>\n<li>Feat: Add menu service to manage menus programmatically<\/li>\n<\/ul>\n\n<h4>1.5.1<\/h4>\n\n<ul>\n<li>Fix: Get template<\/li>\n<\/ul>\n\n<h4>1.5.0<\/h4>\n\n<ul>\n<li>Feat: Add REST API authentication<\/li>\n<\/ul>\n\n<h4>1.4.1<\/h4>\n\n<ul>\n<li>Fix: Gravity Forms notifications builder<\/li>\n<\/ul>\n\n<h4>1.4.0<\/h4>\n\n<ul>\n<li>Feat: Allow max upload size update from admin<\/li>\n<\/ul>\n\n<h4>1.3.5<\/h4>\n\n<ul>\n<li>Update: Gravity Forms fields \u2014 added select, radio, checkbox format<\/li>\n<\/ul>\n\n<h4>1.3.0<\/h4>\n\n<ul>\n<li>Update: Cookie consent banner message<\/li>\n<\/ul>\n\n<h4>1.2.10<\/h4>\n\n<ul>\n<li>Fix: Missing class import check and return value of jsonSerialize<\/li>\n<\/ul>\n\n<h4>1.2.0<\/h4>\n\n<ul>\n<li>Feat: Add cookie consent banner<\/li>\n<\/ul>\n\n<h4>1.1.0<\/h4>\n\n<ul>\n<li>Feat: Event model update with default ACF fields<\/li>\n<\/ul>\n\n<h4>1.0.6<\/h4>\n\n<ul>\n<li>Feat: Add local documentation generated from local markdown files<\/li>\n<li>Fix: Better local Vite detection, avoid using Vite in production and staging environments<\/li>\n<\/ul>\n\n<h4>1.0.0<\/h4>\n\n<ul>\n<li>Initial release<\/li>\n<\/ul>","raw_excerpt":"A developer toolkit for WordPress themes \u2014 ACF blocks, custom post types, taxonomies, REST API, and utility services.","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin\/300452","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=300452"}],"author":[{"embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wporg\/v1\/users\/hawaiido"}],"wp:attachment":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/media?parent=300452"}],"wp:term":[{"taxonomy":"plugin_section","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_section?post=300452"},{"taxonomy":"plugin_tags","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_tags?post=300452"},{"taxonomy":"plugin_category","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_category?post=300452"},{"taxonomy":"plugin_contributors","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_contributors?post=300452"},{"taxonomy":"plugin_business_model","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_business_model?post=300452"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}