{"id":353764,"date":"2026-08-26T08:14:18","date_gmt":"2026-08-26T08:14:18","guid":{"rendered":"https:\/\/wordpress.org\/plugins\/msc-scheduled-visibility\/"},"modified":"2026-08-28T08:24:46","modified_gmt":"2026-08-28T08:24:46","slug":"msc-scheduled-visibility","status":"publish","type":"plugin","link":"https:\/\/en-ca.wordpress.org\/plugins\/msc-scheduled-visibility\/","author":13798559,"comment_status":"closed","ping_status":"closed","template":"","meta":{"version":"1.2.3","stable_tag":"1.2.3","tested":"7.1","requires":"5.9","requires_php":"7.4","requires_plugins":null,"header_name":"MSC Scheduled Visibility","header_author":"Anomalous Developers","header_description":"Schedule posts and pages to appear and disappear between specific dates and times. Includes block-level scheduling, recurring schedules, role-based visibility, WooCommerce product scheduling, quick\/bulk edit, schedule preview, history and a REST API.","assets_banners_color":"f5f2f4","last_updated":"2026-08-28 08:24:46","external_support_url":"","external_repository_url":"","donate_link":"","header_plugin_uri":"https:\/\/github.com\/djm56\/msc-scheduled-visibility","header_author_uri":"https:\/\/anomalous.co.za","rating":0,"author_block_rating":0,"active_installs":0,"downloads":107,"num_ratings":0,"support_threads":0,"support_threads_resolved":0,"author_block_count":0,"sections":["description","installation","faq","changelog"],"tags":{"1.2.1":{"tag":"1.2.1","author":"djm56","date":"2026-08-26 08:14:10","revision":3666495},"1.2.2":{"tag":"1.2.2","author":"djm56","date":"2026-08-27 14:43:44","revision":3669089},"1.2.3":{"tag":"1.2.3","author":"djm56","date":"2026-08-28 08:24:46","revision":3670021}},"upgrade_notice":{"1.2.3":"<p>Adds 8 new languages (now 20 total at 100% string coverage) and fixes JavaScript translation loading for the block editor sidebar. Recommended update for any site using the block editor in a non-English locale.<\/p>","1.2.2":"<p>Compatibility update: confirmed tested against WordPress 7.1. No functional changes \u2014 safe update.<\/p>","1.2.0":"<p>Important fixes: schedules were firing at the wrong time on any site not set to UTC, and block-level scheduling never worked. Also adds WooCommerce support, quick\/bulk edit, preview, history and a REST API.<\/p>","1.1.0":"<p>Major feature update: block scheduling, recurring patterns, and role-based visibility now included.<\/p>","1.0.0":"<p>Initial plugin release.<\/p>"},"ratings":[],"assets_icons":{"icon-128x128.png":{"filename":"icon-128x128.png","revision":3666495,"resolution":"128x128","location":"assets","locale":"","width":128,"height":128},"icon-256x256.png":{"filename":"icon-256x256.png","revision":3666495,"resolution":"256x256","location":"assets","locale":"","width":256,"height":256}},"assets_banners":{"banner-772x250.png":{"filename":"banner-772x250.png","revision":3666495,"resolution":"772x250","location":"assets","locale":"","width":772,"height":250}},"assets_blueprints":{},"all_blocks":[],"tagged_versions":["1.2.1","1.2.2","1.2.3"],"block_files":[],"assets_screenshots":{"screenshot-1.png":{"filename":"screenshot-1.png","revision":3666495,"resolution":"1","location":"assets","locale":"","width":1143,"height":692},"screenshot-2.png":{"filename":"screenshot-2.png","revision":3666495,"resolution":"2","location":"assets","locale":"","width":1062,"height":713},"screenshot-3.png":{"filename":"screenshot-3.png","revision":3666495,"resolution":"3","location":"assets","locale":"","width":1075,"height":699},"screenshot-4.png":{"filename":"screenshot-4.png","revision":3666495,"resolution":"4","location":"assets","locale":"","width":972,"height":671},"screenshot-5.png":{"filename":"screenshot-5.png","revision":3666495,"resolution":"5","location":"assets","locale":"","width":1153,"height":792},"screenshot-6.png":{"filename":"screenshot-6.png","revision":3666495,"resolution":"6","location":"assets","locale":"","width":1134,"height":551}},"screenshots":[]},"plugin_section":[262246],"plugin_tags":[4121,529,12482,268,6309],"plugin_category":[40],"plugin_contributors":[260636],"plugin_business_model":[],"class_list":["post-353764","plugin","type-plugin","status-publish","hentry","plugin_section-dashboard-widgets","plugin_tags-blocks","plugin_tags-content","plugin_tags-recurring","plugin_tags-scheduling","plugin_tags-visibility","plugin_category-calendar-and-events","plugin_contributors-djm56","plugin_committers-djm56"],"banners":{"banner":"https:\/\/ps.w.org\/msc-scheduled-visibility\/assets\/banner-772x250.png?rev=3666495","banner_2x":false,"banner_rtl":false,"banner_2x_rtl":false},"icons":{"svg":false,"icon":"https:\/\/ps.w.org\/msc-scheduled-visibility\/assets\/icon-128x128.png?rev=3666495","icon_2x":"https:\/\/ps.w.org\/msc-scheduled-visibility\/assets\/icon-256x256.png?rev=3666495","generated":false},"screenshots":[{"src":"https:\/\/ps.w.org\/msc-scheduled-visibility\/assets\/screenshot-1.png?rev=3666495","caption":""},{"src":"https:\/\/ps.w.org\/msc-scheduled-visibility\/assets\/screenshot-2.png?rev=3666495","caption":""},{"src":"https:\/\/ps.w.org\/msc-scheduled-visibility\/assets\/screenshot-3.png?rev=3666495","caption":""},{"src":"https:\/\/ps.w.org\/msc-scheduled-visibility\/assets\/screenshot-4.png?rev=3666495","caption":""},{"src":"https:\/\/ps.w.org\/msc-scheduled-visibility\/assets\/screenshot-5.png?rev=3666495","caption":""},{"src":"https:\/\/ps.w.org\/msc-scheduled-visibility\/assets\/screenshot-6.png?rev=3666495","caption":""}],"raw_content":"<!--section=description-->\n<p>MSC Scheduled Visibility lets you control when content appears on your site without changing publish status. Features include:<\/p>\n\n<ul>\n<li><strong>Basic scheduling<\/strong> \u2014 Set a \"Visible From\" and \"Visible Until\" date\/time for any post or page.<\/li>\n<li><strong>Block-level scheduling<\/strong> \u2014 Show or hide individual Gutenberg blocks on a schedule via the editor sidebar.<\/li>\n<li><strong>Recurring schedules<\/strong> \u2014 Make content appear on a daily, weekly, or monthly repeating pattern.<\/li>\n<li><strong>Role-based visibility<\/strong> \u2014 Restrict content to specific user roles or logged-out visitors.<\/li>\n<li><strong>WooCommerce products<\/strong> \u2014 Hide scheduled-out products from the shop and block their purchase.<\/li>\n<li><strong>Quick and bulk edit<\/strong> \u2014 Set windows from the post list without opening a post.<\/li>\n<li><strong>Schedule preview<\/strong> \u2014 View the front end as it will appear at any moment, or to any role.<\/li>\n<li><strong>Visibility history<\/strong> \u2014 A log of every show and hide, and what triggered it.<\/li>\n<li><strong>REST API<\/strong> \u2014 Read and write schedules programmatically under <code>mscsv\/v1<\/code>.<\/li>\n<li><strong>Dashboard widget<\/strong> \u2014 See upcoming visibility changes at a glance.<\/li>\n<li><strong>Admin column<\/strong> \u2014 View scheduling status directly in the post list.<\/li>\n<\/ul>\n\n<!--section=installation-->\n<ol>\n<li>Upload the plugin to <code>\/wp-content\/plugins\/<\/code>.<\/li>\n<li>Activate in the WordPress plugins screen.<\/li>\n<li>Configure from Settings &gt; MSC Scheduled Visibility.<\/li>\n<\/ol>\n\n<!--section=faq-->\n<dl>\n<dt id=\"how%20do%20i%20configure%20the%20plugin%3F\"><h3>How do I configure the plugin?<\/h3><\/dt>\n<dd><p>Navigate to Settings &gt; MSC Scheduled Visibility to configure the plugin settings.<\/p><\/dd>\n<dt id=\"how%20do%20i%20schedule%20a%20post%3F\"><h3>How do I schedule a post?<\/h3><\/dt>\n<dd><p>When editing a post, look for the \"Scheduled Visibility\" metabox in the sidebar. Enable scheduling and set your dates\/times.<\/p><\/dd>\n<dt id=\"how%20does%20block-level%20scheduling%20work%3F\"><h3>How does block-level scheduling work?<\/h3><\/dt>\n<dd><p>In the block editor, open the \"Block Scheduling\" sidebar panel (calendar icon). Select a block and configure its visibility schedule.<\/p><\/dd>\n<dt id=\"why%20can%20i%20still%20see%20a%20post%20that%20should%20be%20hidden%3F\"><h3>Why can I still see a post that should be hidden?<\/h3><\/dt>\n<dd><p>Users who can edit other people's posts bypass scheduling so they can proof upcoming content. Use the \"Preview schedule\" control in the post metabox, or view the site logged out, to see what visitors get.<\/p><\/dd>\n<dt id=\"does%20this%20depend%20on%20wp-cron%20running%3F\"><h3>Does this depend on WP-Cron running?<\/h3><\/dt>\n<dd><p>No. Cron keeps the stored status current for admin listings, but every page view also checks the schedule live, so visitors never see content past its window even if cron is delayed.<\/p><\/dd>\n<dt id=\"why%20does%20an%20archive%20page%20sometimes%20show%20fewer%20posts%20than%20usual%3F\"><h3>Why does an archive page sometimes show fewer posts than usual?<\/h3><\/dt>\n<dd><p>Hidden posts are removed as results are returned rather than excluded in the database query, because whether a post is visible can depend on the current visitor's role. A page set to ten posts will show eight if two of them are outside their window, and the page count can be slightly over-reported. Visibility itself is always correct.<\/p><\/dd>\n<dt id=\"what%20timezone%20do%20the%20dates%20use%3F\"><h3>What timezone do the dates use?<\/h3><\/dt>\n<dd><p>The site timezone set under Settings &gt; General.<\/p><\/dd>\n\n<\/dl>\n\n<!--section=changelog-->\n<h4>1.2.3<\/h4>\n\n<ul>\n<li>Added 8 new languages: Russian, Simplified Chinese, Turkish, Polish, Indonesian, Swedish, Ukrainian, Arabic. All 20 bundled locales now at 100% string coverage.<\/li>\n<li>Fixed JavaScript translation loading for the block editor sidebar \u2014 per-script <code>.json<\/code> translation files are now generated and shipped with the plugin.<\/li>\n<\/ul>\n\n<h4>1.2.2<\/h4>\n\n<ul>\n<li>Tested with WordPress 7.1. No functional changes.<\/li>\n<\/ul>\n\n<h4>1.2.1<\/h4>\n\n<ul>\n<li>Preview bar CSS is now enqueued as a stylesheet instead of printed inline<\/li>\n<li>Quick Edit row data moved from a JSON script element to data attributes<\/li>\n<li>Filtered replacement content for hidden posts is escaped with wp_kses_post() before output<\/li>\n<\/ul>\n\n<h4>1.2.0<\/h4>\n\n<ul>\n<li>Added Quick Edit and Bulk Edit support for visibility windows<\/li>\n<li>Added WooCommerce product scheduling (shop, archives, purchasability and cart)<\/li>\n<li>Added schedule preview \u2014 view the front end at a chosen time or as a chosen role<\/li>\n<li>Added visibility history log with a History settings tab<\/li>\n<li>Added a REST API under <code>mscsv\/v1<\/code> for reading and writing schedules<\/li>\n<li>Added an Advanced settings tab with feature toggles and log retention<\/li>\n<li>Added real diagnostics to the Support tab (cron status, timezone, status counts)<\/li>\n<li>Fixed a timezone offset error that made every schedule fire wrong by the site's UTC offset<\/li>\n<li>Fixed block-level scheduling, which never took effect because it ran after blocks were rendered<\/li>\n<li>Fixed block schedules being applied to the wrong blocks<\/li>\n<li>Fixed recurring and role rules being ignored unless date scheduling was also enabled<\/li>\n<li>Fixed archives ignoring recurring windows and role restrictions<\/li>\n<li>Fixed end dates without a time expiring at the start of the day instead of the end<\/li>\n<li>Fixed recurring windows that cross midnight, and monthly recurrence on days 29-31<\/li>\n<li>Batched the cron sweep and added per-request visibility caching<\/li>\n<\/ul>\n\n<h4>1.1.0<\/h4>\n\n<ul>\n<li>Added block-level scheduling via Gutenberg sidebar panel<\/li>\n<li>Added recurring schedules (daily, weekly, monthly patterns)<\/li>\n<li>Added role-based visibility (restrict content by user role)<\/li>\n<li>Added tabbed settings page (General, Block Scheduling, Recurring, Role-Based, Support)<\/li>\n<li>Added feature toggles for independent enable\/disable of each feature<\/li>\n<li>Added build system with @wordpress\/scripts for block editor assets<\/li>\n<li>All features now in a single unified plugin<\/li>\n<li>Bumped version to 1.1.0<\/li>\n<\/ul>\n\n<h4>1.0.0<\/h4>\n\n<ul>\n<li>Initial release with full scheduling features.<\/li>\n<\/ul>","raw_excerpt":"Schedule posts, pages and products to appear and disappear between set dates and times, with recurring windows and role-based visibility.","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/en-ca.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin\/353764","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/en-ca.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin"}],"about":[{"href":"https:\/\/en-ca.wordpress.org\/plugins\/wp-json\/wp\/v2\/types\/plugin"}],"replies":[{"embeddable":true,"href":"https:\/\/en-ca.wordpress.org\/plugins\/wp-json\/wp\/v2\/comments?post=353764"}],"author":[{"embeddable":true,"href":"https:\/\/en-ca.wordpress.org\/plugins\/wp-json\/wporg\/v1\/users\/djm56"}],"wp:attachment":[{"href":"https:\/\/en-ca.wordpress.org\/plugins\/wp-json\/wp\/v2\/media?parent=353764"}],"wp:term":[{"taxonomy":"plugin_section","embeddable":true,"href":"https:\/\/en-ca.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_section?post=353764"},{"taxonomy":"plugin_tags","embeddable":true,"href":"https:\/\/en-ca.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_tags?post=353764"},{"taxonomy":"plugin_category","embeddable":true,"href":"https:\/\/en-ca.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_category?post=353764"},{"taxonomy":"plugin_contributors","embeddable":true,"href":"https:\/\/en-ca.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_contributors?post=353764"},{"taxonomy":"plugin_business_model","embeddable":true,"href":"https:\/\/en-ca.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_business_model?post=353764"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}