{"id":334285,"date":"2026-07-02T12:19:58","date_gmt":"2026-07-02T12:19:58","guid":{"rendered":"https:\/\/wordpress.org\/plugins\/effortless-required-fields-validator\/"},"modified":"2026-07-02T12:19:32","modified_gmt":"2026-07-02T12:19:32","slug":"effortless-required-fields-validator","status":"publish","type":"plugin","link":"https:\/\/ltz.wordpress.org\/plugins\/effortless-required-fields-validator\/","author":23148025,"comment_status":"closed","ping_status":"closed","template":"","meta":{"version":"1.4.7","stable_tag":"1.4.7","tested":"7.0","requires":"5.8","requires_php":"7.4","requires_plugins":null,"header_name":"Effortless Required Fields Validator","header_author":"domclic","header_description":"Forces all users to fill Title, Content, Featured Image and Category before publishing posts. Works with both the block editor (Gutenberg) and Classic Editor.","assets_banners_color":"","last_updated":"2026-07-02 12:19:32","external_support_url":"","external_repository_url":"","donate_link":"","header_plugin_uri":"","header_author_uri":"","rating":0,"author_block_rating":0,"active_installs":0,"downloads":21,"num_ratings":0,"support_threads":0,"support_threads_resolved":0,"author_block_count":0,"sections":["description","installation","faq","changelog"],"tags":{"1.4.7":{"tag":"1.4.7","author":"domclic","date":"2026-07-02 12:19:32"}},"upgrade_notice":{"1.4.7":"<p>Security fix: server-side validation is now enforced for REST API \/ block editor publishing, closing a gap where required fields could be bypassed.<\/p>","1.4.6":"<p>Documentation fix: Classic Editor support was always present but incorrectly described as Gutenberg-only. No functional changes.<\/p>","1.4.3":"<p>Fix: scheduled posts now validated, Gutenberg empty-content check improved, warning banner visible above all modals.<\/p>","1.4.2":"<p>Important fixes: publish blocking now uses the official lockPostSaving API, server-side category validation added, and documentation corrected.<\/p>","1.3.0":"<p>Major rewrite: Gutenberg validation now uses React hooks (registerPlugin). Fixes subscribe loops and false publish errors. Classic editor validation simplified.<\/p>","1.1.1":"<p>Critical fix: Gutenberg validation now works correctly for pages and when updating published posts. WPCS compliant. Tested with WordPress 6.9.<\/p>","1.0.8":"<p>Important update: All users (including admins) now require validation. Improved translation support for multilingual sites.<\/p>","1.0.7":"<p>Recommended update for better WordPress.org compliance and security improvements.<\/p>"},"ratings":[],"assets_icons":[],"assets_banners":[],"assets_blueprints":{},"all_blocks":[],"tagged_versions":["1.4.7"],"block_files":[],"assets_screenshots":[],"screenshots":{"1":"Warning banner showing missing required fields in Gutenberg editor","2":"Disabled Publish button when required fields are missing","3":"Validation error message in Classic Editor","4":"All required fields completed - ready to publish"}},"plugin_section":[],"plugin_tags":[89,1795,166,266794,1460],"plugin_category":[50],"plugin_contributors":[241557],"plugin_business_model":[],"class_list":["post-334285","plugin","type-plugin","status-publish","hentry","plugin_tags-category","plugin_tags-featured-image","plugin_tags-posts","plugin_tags-required-fields","plugin_tags-title","plugin_category-media","plugin_contributors-domclic","plugin_committers-domclic"],"banners":[],"icons":{"svg":false,"icon":"https:\/\/s.w.org\/plugins\/geopattern-icon\/effortless-required-fields-validator.svg","icon_2x":false,"generated":true},"screenshots":[],"raw_content":"<!--section=description-->\n<p><strong>Effortless Required Fields Validator<\/strong> ensures content quality by requiring all users to complete essential fields before publishing posts. It works with both the block editor (Gutenberg) and the Classic Editor.<\/p>\n\n<h4>Required Fields<\/h4>\n\n<ul>\n<li><strong>Title<\/strong> - Post title must not be empty<\/li>\n<li><strong>Content<\/strong> - Post content must not be empty<\/li>\n<li><strong>Featured Image<\/strong> - A featured image must be set<\/li>\n<li><strong>Category<\/strong> - At least one category must be selected (posts only)<\/li>\n<\/ul>\n\n<h4>Features<\/h4>\n\n<ul>\n<li><strong>Works for all users<\/strong> - Admins, Editors, Authors, and Contributors all have the same validation<\/li>\n<li><strong>Dual editor support<\/strong> - Works with both the block editor (Gutenberg) and the Classic Editor<\/li>\n<li><strong>Block editor: real-time validation<\/strong> - Publish button is disabled and a warning banner shows which fields are missing<\/li>\n<li><strong>Classic Editor: server-side validation<\/strong> - An error message is shown if required fields are missing when you click Publish<\/li>\n<li><strong>Multilingual ready<\/strong> - Fully translatable with included French translation<\/li>\n<li><strong>Lightweight<\/strong> - Minimal performance impact<\/li>\n<li><strong>Clean code<\/strong> - Follows WordPress coding standards<\/li>\n<\/ul>\n\n<h4>How It Works<\/h4>\n\n<p><strong>In the block editor (Gutenberg):<\/strong><\/p>\n\n<ol>\n<li>While editing a post, the plugin monitors all required fields in real time<\/li>\n<li>If any field is missing, the Publish button is automatically disabled<\/li>\n<li>A prominent warning banner shows exactly which fields are missing<\/li>\n<li>Once all required fields are filled, publishing is re-enabled<\/li>\n<\/ol>\n\n<p><strong>In the Classic Editor:<\/strong><\/p>\n\n<ol>\n<li>Fill in your post as usual and click Publish<\/li>\n<li>If any required field is missing, an error page is shown with a list of missing fields<\/li>\n<li>Use the \"Back to editing\" link to return to the post and complete the missing fields<\/li>\n<li>Once all required fields are filled, publishing succeeds<\/li>\n<\/ol>\n\n<p>Server-side validation runs for both editors, so the check cannot be bypassed.<\/p>\n\n<h4>Use Cases<\/h4>\n\n<ul>\n<li>Maintain consistent content quality across your site<\/li>\n<li>Ensure all posts have featured images for better social media sharing<\/li>\n<li>Enforce editorial standards for multi-author blogs<\/li>\n<li>Prevent incomplete posts from being published accidentally<\/li>\n<li>Improve SEO by requiring complete content<\/li>\n<\/ul>\n\n<h4>Translations<\/h4>\n\n<ul>\n<li>English (default)<\/li>\n<li>French (Fran\u00e7ais) - included<\/li>\n<li>Translation ready - submit your translations!<\/li>\n<\/ul>\n\n<h3>Developer Notes<\/h3>\n\n<h4>Filters Available<\/h4>\n\n<p>Currently, the plugin doesn't provide filters for customization, but this may be added in future versions based on community feedback.<\/p>\n\n<h4>Translation<\/h4>\n\n<p>To translate this plugin:<\/p>\n\n<ol>\n<li>Use the provided <code>.pot<\/code> file in the <code>\/languages<\/code> folder<\/li>\n<li>Create your translation using Poedit or similar tool<\/li>\n<li>For JavaScript translations, compile JSON files using WP-CLI:\n   wp i18n make-json languages\/ --no-purge<\/li>\n<li>Submit your translation to the plugin author<\/li>\n<\/ol>\n\n<h4>Support<\/h4>\n\n<p>For support, please use the WordPress.org support forums or visit the plugin's GitHub repository (if available).<\/p>\n\n<h3>Privacy Policy<\/h3>\n\n<p>This plugin does not collect, store, or transmit any user data. It only validates post fields in the WordPress editor.<\/p>\n\n<h3>Credits<\/h3>\n\n<p>Developed by domclic with \u2764\ufe0f for the WordPress community.<\/p>\n\n<!--section=installation-->\n<h4>Automatic Installation<\/h4>\n\n<ol>\n<li>Log in to your WordPress admin panel<\/li>\n<li>Go to Plugins &gt; Add New<\/li>\n<li>Search for \"Effortless Required Fields Validator\"<\/li>\n<li>Click \"Install Now\" and then \"Activate\"<\/li>\n<\/ol>\n\n<h4>Manual Installation<\/h4>\n\n<ol>\n<li>Download the plugin ZIP file<\/li>\n<li>Log in to your WordPress admin panel<\/li>\n<li>Go to Plugins &gt; Add New &gt; Upload Plugin<\/li>\n<li>Choose the ZIP file and click \"Install Now\"<\/li>\n<li>Activate the plugin<\/li>\n<\/ol>\n\n<h4>After Activation<\/h4>\n\n<p>The plugin works immediately after activation. No configuration needed!<\/p>\n\n<p>Simply try to publish a post without filling all required fields, and you'll see the validation in action.<\/p>\n\n<!--section=faq-->\n<dl>\n<dt id=\"does%20this%20work%20with%20the%20classic%20editor%3F\"><h3>Does this work with the Classic Editor?<\/h3><\/dt>\n<dd><p>Yes! The plugin includes validation for both Gutenberg and the Classic Editor.<\/p><\/dd>\n<dt id=\"can%20i%20customize%20which%20fields%20are%20required%3F\"><h3>Can I customize which fields are required?<\/h3><\/dt>\n<dd><p>Currently, the plugin requires Title, Content, Featured Image, and Category (for posts). Customization options may be added in future versions based on user feedback.<\/p><\/dd>\n<dt id=\"does%20it%20work%20for%20custom%20post%20types%3F\"><h3>Does it work for custom post types?<\/h3><\/dt>\n<dd><p>Currently, the plugin only validates the 'post' post type. Support for pages and custom post types may be added in future versions.<\/p><\/dd>\n<dt id=\"can%20admins%20bypass%20the%20validation%3F\"><h3>Can admins bypass the validation?<\/h3><\/dt>\n<dd><p>No. As of version 1.0.8, all users (including administrators) must complete all required fields before publishing. This ensures consistent content quality across your entire site.<\/p><\/dd>\n<dt id=\"will%20this%20affect%20my%20existing%20posts%3F\"><h3>Will this affect my existing posts?<\/h3><\/dt>\n<dd><p>No. The validation only applies when publishing new posts or updating existing ones. Your existing published posts remain unaffected.<\/p><\/dd>\n<dt id=\"does%20it%20work%20with%20gutenberg%20blocks%3F\"><h3>Does it work with Gutenberg blocks?<\/h3><\/dt>\n<dd><p>Yes! The plugin is fully compatible with the Gutenberg block editor and all standard blocks.<\/p><\/dd>\n<dt id=\"what%20happens%20if%20i%20try%20to%20publish%20without%20required%20fields%3F\"><h3>What happens if I try to publish without required fields?<\/h3><\/dt>\n<dd><p>In Gutenberg, the Publish button will be disabled and a warning banner will show which fields are missing. In the Classic Editor, you'll see an error message with a link to return to editing.<\/p><\/dd>\n<dt id=\"is%20it%20translation%20ready%3F\"><h3>Is it translation ready?<\/h3><\/dt>\n<dd><p>Yes! The plugin is fully translatable and includes French translation. You can add your own translations using the provided .pot file.<\/p><\/dd>\n<dt id=\"does%20it%20impact%20site%20performance%3F\"><h3>Does it impact site performance?<\/h3><\/dt>\n<dd><p>No. The plugin only loads its assets on post edit screens and has minimal performance impact.<\/p><\/dd>\n\n<\/dl>\n\n<!--section=changelog-->\n<h4>1.4.7<\/h4>\n\n<ul>\n<li><strong>Security fix:<\/strong> Server-side validation was completely skipped for REST API requests, meaning the block editor's \"Publish\" action (and any other REST client) could publish posts missing required fields without hitting any server-side check. Added a <code>rest_pre_insert_post<\/code> validation that enforces the same required fields for REST-submitted posts.<\/li>\n<li><strong>Fixed:<\/strong> Featured image and category validation relied on raw <code>$_POST<\/code> data, which could incorrectly block programmatic post publishing (WP-CLI, cron, imports, other plugins) that doesn't submit the classic editor's form fields. The check is now scoped to genuine classic-editor form submissions, with a safe fallback for programmatic saves of existing posts.<\/li>\n<\/ul>\n\n<h4>1.4.6<\/h4>\n\n<ul>\n<li><strong>Fixed:<\/strong> Plugin description, short description, and readme corrected \u2014 Classic Editor support was always present but not mentioned; all references to \"Gutenberg only\" removed<\/li>\n<li><strong>Improved:<\/strong> \"How It Works\" section now documents both block editor and Classic Editor behaviour separately<\/li>\n<li><strong>Improved:<\/strong> Features section clarified to distinguish real-time (Gutenberg) vs server-side (Classic Editor) validation<\/li>\n<li><strong>Fixed:<\/strong> Privacy Policy referred to \"post\/page fields\" \u2014 corrected to \"post fields\" (pages are not validated)<\/li>\n<\/ul>\n\n<h4>1.4.5<\/h4>\n\n<ul>\n<li>Update: Confirmed compatibility with WordPress 7.0.<\/li>\n<\/ul>\n\n<h4>1.4.4<\/h4>\n\n<ul>\n<li>Update: Tested up to WordPress 7.0.<\/li>\n<\/ul>\n\n<h4>1.4.3<\/h4>\n\n<ul>\n<li><strong>Fixed:<\/strong> Scheduled posts now validated in Classic Editor \u2014 status <code>future<\/code> was not being caught<\/li>\n<li><strong>Fixed:<\/strong> Content check in Gutenberg now strips block delimiters and HTML tags before testing for empty<\/li>\n<li><strong>Fixed:<\/strong> Warning banner z-index raised to 100001 \u2014 no longer hidden behind Gutenberg modals<\/li>\n<li><strong>Improved:<\/strong> Warning banner gets <code>max-width: 90vw<\/code> and centered text for narrow viewports<\/li>\n<li><strong>Removed:<\/strong> Dead <code>erfv-missing-fields<\/code> body class no longer toggled in JS<\/li>\n<li><strong>Improved:<\/strong> Removed unnecessary <code>wp-edit-post<\/code> script dependency<\/li>\n<li><strong>Fixed:<\/strong> README <code>Post\/page<\/code> copy corrected to <code>Post<\/code> throughout<\/li>\n<li>Release date: May 13, 2026<\/li>\n<\/ul>\n\n<h4>1.4.2<\/h4>\n\n<ul>\n<li><strong>Fixed:<\/strong> Gutenberg publish blocking now uses <code>lockPostSaving<\/code>\/<code>unlockPostSaving<\/code> API \u2014 replaces CSS-only approach that could be bypassed<\/li>\n<li><strong>Fixed:<\/strong> Server-side category validation added to classic editor PHP filter (was only enforced client-side)<\/li>\n<li><strong>Fixed:<\/strong> Warning banner styles moved from inline JS to CSS file<\/li>\n<li><strong>Added:<\/strong> <code>ERFV_VERSION<\/code> constant \u2014 replaces hardcoded version strings in asset enqueue calls<\/li>\n<li><strong>Fixed:<\/strong> README corrected to reflect that validation applies to posts only, not pages<\/li>\n<li>Release date: May 13, 2026<\/li>\n<\/ul>\n\n<h4>1.3.0<\/h4>\n\n<ul>\n<li><strong>Rewritten:<\/strong> JavaScript validation now uses <code>registerPlugin<\/code> with React hooks (<code>useSelect<\/code>, <code>useEffect<\/code>) \u2014 eliminates subscribe loop<\/li>\n<li><strong>Improved:<\/strong> Warning banner rendered as a React portal component<\/li>\n<li><strong>Improved:<\/strong> Gutenberg validation is fully client-side \u2014 removed REST API filters that caused false publish errors<\/li>\n<li><strong>Improved:<\/strong> Simplified classic editor validation with cleaner function signature<\/li>\n<li><strong>Fixed:<\/strong> Classic editor featured image detection on new posts via <code>$_POST['_thumbnail_id']<\/code><\/li>\n<li><strong>Fixed:<\/strong> Quick edit and bulk edit no longer trigger validation<\/li>\n<li><strong>Fixed:<\/strong> <code>wp_die()<\/code> output sanitized with <code>wp_kses()<\/code>, back link uses <code>wp_get_referer()<\/code><\/li>\n<li><strong>Fixed:<\/strong> Removed unused CSS rules and assets<\/li>\n<li><strong>Added:<\/strong> <code>Requires at least<\/code> and <code>Requires PHP<\/code> headers in main plugin file<\/li>\n<li>Release date: March 28, 2026<\/li>\n<\/ul>\n\n<h4>1.1.1<\/h4>\n\n<ul>\n<li><strong>Fixed:<\/strong> Server-side validation now works for pages in Gutenberg (added <code>rest_pre_insert_page<\/code> filter)<\/li>\n<li><strong>Fixed:<\/strong> Featured image and category validation uses REST request payload instead of relying on unsaved post meta<\/li>\n<li><strong>Fixed:<\/strong> Validation now falls back to stored post data when fields are not in the request payload<\/li>\n<li><strong>Fixed:<\/strong> Publish status detection on updates to already-published posts<\/li>\n<li><strong>Fixed:<\/strong> XSS risk in JavaScript warning banner (replaced innerHTML with safe DOM methods)<\/li>\n<li><strong>Improved:<\/strong> Full WordPress Coding Standards (WPCS) compliance<\/li>\n<li><strong>Improved:<\/strong> Yoda conditions, long array syntax, tab indentation, proper PHPDoc<\/li>\n<li><strong>Updated:<\/strong> All translation files regenerated (POT, PO, MO, JSON) with correct line references<\/li>\n<li><strong>Tested:<\/strong> Compatible with WordPress 6.9<\/li>\n<li>Release date: March 27, 2026<\/li>\n<\/ul>\n\n<h4>1.0.8<\/h4>\n\n<ul>\n<li><strong>Changed:<\/strong> All users (including admins) now have the same validation requirements<\/li>\n<li><strong>Added:<\/strong> Proper text domain loading for better translation support<\/li>\n<li><strong>Fixed:<\/strong> JavaScript translation support with JSON file generation instructions<\/li>\n<li><strong>Improved:<\/strong> Code documentation and comments<\/li>\n<li><strong>Improved:<\/strong> Emoji encoding in error messages<\/li>\n<li><strong>Updated:<\/strong> Translation files (.pot and French .po)<\/li>\n<li>Release date: November 20, 2025<\/li>\n<\/ul>\n\n<h4>1.0.7<\/h4>\n\n<ul>\n<li>Fixed all WordPress.org Plugin Check errors<\/li>\n<li>Fully standards-compliant i18n and security<\/li>\n<li>Release date: November 19, 2025<\/li>\n<\/ul>\n\n<h4>1.0.6<\/h4>\n\n<ul>\n<li>Code cleanup and better validation<\/li>\n<li>Improved error handling<\/li>\n<\/ul>\n\n<h4>1.0.5<\/h4>\n\n<ul>\n<li>Fixed role detection for Editor\/Author\/Contributor<\/li>\n<li>Better compatibility with different user roles<\/li>\n<\/ul>\n\n<h4>1.0.4<\/h4>\n\n<ul>\n<li>Initial improvements and bug fixes<\/li>\n<\/ul>\n\n<h4>1.0.0<\/h4>\n\n<ul>\n<li>Initial release<\/li>\n<\/ul>","raw_excerpt":"Forces Title, Content, Featured Image and Category before publishing posts. Works with both the block editor (Gutenberg) and Classic Editor.","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/ltz.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin\/334285","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/ltz.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin"}],"about":[{"href":"https:\/\/ltz.wordpress.org\/plugins\/wp-json\/wp\/v2\/types\/plugin"}],"replies":[{"embeddable":true,"href":"https:\/\/ltz.wordpress.org\/plugins\/wp-json\/wp\/v2\/comments?post=334285"}],"author":[{"embeddable":true,"href":"https:\/\/ltz.wordpress.org\/plugins\/wp-json\/wporg\/v1\/users\/domclic"}],"wp:attachment":[{"href":"https:\/\/ltz.wordpress.org\/plugins\/wp-json\/wp\/v2\/media?parent=334285"}],"wp:term":[{"taxonomy":"plugin_section","embeddable":true,"href":"https:\/\/ltz.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_section?post=334285"},{"taxonomy":"plugin_tags","embeddable":true,"href":"https:\/\/ltz.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_tags?post=334285"},{"taxonomy":"plugin_category","embeddable":true,"href":"https:\/\/ltz.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_category?post=334285"},{"taxonomy":"plugin_contributors","embeddable":true,"href":"https:\/\/ltz.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_contributors?post=334285"},{"taxonomy":"plugin_business_model","embeddable":true,"href":"https:\/\/ltz.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_business_model?post=334285"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}