{"id":283387,"date":"2026-02-25T17:25:17","date_gmt":"2026-02-25T17:25:17","guid":{"rendered":"https:\/\/es.wordpress.org\/plugins\/scheduled-posts-showcase\/"},"modified":"2026-08-02T23:53:42","modified_gmt":"2026-08-02T23:53:42","slug":"scheduled-posts-showcase","status":"publish","type":"plugin","link":"https:\/\/el.wordpress.org\/plugins\/scheduled-posts-showcase\/","author":1320655,"comment_status":"closed","ping_status":"closed","template":"","meta":{"version":"1.3.0","stable_tag":"1.3.0","tested":"7.0.2","requires":"5.8","requires_php":"7.4","requires_plugins":null,"header_name":"Scheduled Posts Showcase","header_author":"Fernando Tellado","header_description":"Display your scheduled posts on the frontend without generating 404 links. Show visitors what's coming next with a beautiful, customizable widget, block, or shortcode.","assets_banners_color":"fbfbfb","last_updated":"2026-08-02 23:53:42","external_support_url":"","external_repository_url":"","donate_link":"","header_plugin_uri":"https:\/\/servicios.ayudawp.com","header_author_uri":"https:\/\/ayudawp.com","rating":4,"author_block_rating":0,"active_installs":30,"downloads":869,"num_ratings":1,"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":"fernandot","date":"2026-02-26 13:13:16"},"1.0.1":{"tag":"1.0.1","author":"fernandot","date":"2026-03-27 20:50:58"},"1.1.0":{"tag":"1.1.0","author":"fernandot","date":"2026-04-27 15:07:28"},"1.2.0":{"tag":"1.2.0","author":"fernandot","date":"2026-06-16 18:08:41"},"1.3.0":{"tag":"1.3.0","author":"fernandot","date":"2026-08-02 23:53:42"}},"upgrade_notice":{"1.3.0":"<p>Filters by taxonomy, author and multiple post types everywhere. The settings page is now Appearance &gt; Scheduled Posts. A bare [scheduled-posts-showcase] now inherits your global settings, so its output may change. Cache invalidation fixed on Redis\/Memcached.<\/p>"},"ratings":{"1":0,"2":0,"3":0,"4":1,"5":0},"assets_icons":{"icon-128x128.jpg":{"filename":"icon-128x128.jpg","revision":3469970,"resolution":"128x128","location":"assets","locale":"","width":128,"height":128},"icon-256x256.jpg":{"filename":"icon-256x256.jpg","revision":3469970,"resolution":"256x256","location":"assets","locale":"","width":256,"height":256}},"assets_banners":{"banner-1544x500-es.jpg":{"filename":"banner-1544x500-es.jpg","revision":3470356,"resolution":"1544x500","location":"assets","locale":"es","width":1544,"height":500},"banner-1544x500.jpg":{"filename":"banner-1544x500.jpg","revision":3470356,"resolution":"1544x500","location":"assets","locale":"","width":1544,"height":500},"banner-772x250-es.jpg":{"filename":"banner-772x250-es.jpg","revision":3470356,"resolution":"772x250","location":"assets","locale":"es","width":772,"height":250},"banner-772x250.jpg":{"filename":"banner-772x250.jpg","revision":3470356,"resolution":"772x250","location":"assets","locale":"","width":772,"height":250}},"assets_blueprints":{"blueprint.json":{"filename":"blueprint.json","revision":3632166,"resolution":false,"location":"assets","locale":"","contents":"{\"$schema\":\"https:\\\/\\\/playground.wordpress.net\\\/blueprint-schema.json\",\"preferredVersions\":{\"php\":\"latest\",\"wp\":\"latest\"},\"phpExtensionBundles\":[\"kitchen-sink\"],\"features\":{\"networking\":true},\"steps\":[{\"step\":\"login\",\"username\":\"admin\",\"password\":\"password\"},{\"step\":\"installPlugin\",\"pluginData\":{\"resource\":\"wordpress.org\\\/plugins\",\"slug\":\"scheduled-posts-showcase\"},\"options\":{\"activate\":true}}],\"landingPage\":\"\\\/wp-admin\\\/plugins.php\"}"}},"all_blocks":{"scheduled-posts-showcase\/scheduled-posts":{"$schema":"https:\/\/schemas.wp.org\/trunk\/block.json","apiVersion":3,"name":"scheduled-posts-showcase\/scheduled-posts","version":"1.3.0","title":"Scheduled Posts Showcase","description":"Display scheduled posts on your site.","category":"widgets","icon":"calendar-alt","keywords":["scheduled","future","posts","upcoming"],"textdomain":"scheduled-posts-showcase","supports":{"html":false},"attributes":{"count":{"type":"number","default":5},"postType":{"type":"string","default":"post"},"postTypes":{"type":"array","items":{"type":"string"},"default":[]},"postTypesAll":{"type":"boolean","default":false},"taxonomyTerms":{"type":"object","default":{}},"taxonomyAll":{"type":"array","items":{"type":"string"},"default":[]},"authorsAll":{"type":"boolean","default":true},"taxMode":{"type":"string","default":"include"},"authors":{"type":"array","items":{"type":"number"},"default":[]},"order":{"type":"string","default":"ASC"},"showImage":{"type":"boolean","default":true},"imageSize":{"type":"string","default":"thumbnail"},"showDate":{"type":"boolean","default":true},"showExcerpt":{"type":"boolean","default":false},"showCategories":{"type":"boolean","default":false},"heading":{"type":"string","default":""},"headingTag":{"type":"string","default":"h3"},"listStyle":{"type":"string","default":"theme"},"icon":{"type":"string","default":"dashicons-calendar-alt"},"containerStyle":{"type":"string","default":"card"},"footer":{"type":"string","default":""},"noPostsMessage":{"type":"string","default":""},"customClass":{"type":"string","default":""}},"editorScript":"file:.\/block-editor.js","editorStyle":"spscase-frontend","style":"spscase-frontend"}},"tagged_versions":["1.0.0","1.0.1","1.1.0","1.2.0","1.3.0"],"block_files":[],"assets_screenshots":{"screenshot-1-es.jpg":{"filename":"screenshot-1-es.jpg","revision":3469763,"resolution":"1","location":"assets","locale":"es","width":1112,"height":1580},"screenshot-1.jpg":{"filename":"screenshot-1.jpg","revision":3469694,"resolution":"1","location":"assets","locale":"","width":1058,"height":1612},"screenshot-2-es.jpg":{"filename":"screenshot-2-es.jpg","revision":3469763,"resolution":"2","location":"assets","locale":"es","width":1136,"height":1556},"screenshot-2.jpg":{"filename":"screenshot-2.jpg","revision":3469694,"resolution":"2","location":"assets","locale":"","width":1078,"height":1510},"screenshot-3-es.jpg":{"filename":"screenshot-3-es.jpg","revision":3469763,"resolution":"3","location":"assets","locale":"es","width":1626,"height":1092},"screenshot-3.jpg":{"filename":"screenshot-3.jpg","revision":3469694,"resolution":"3","location":"assets","locale":"","width":1280,"height":1208},"screenshot-4-es.jpg":{"filename":"screenshot-4-es.jpg","revision":3469763,"resolution":"4","location":"assets","locale":"es","width":1632,"height":1098},"screenshot-4.jpg":{"filename":"screenshot-4.jpg","revision":3469694,"resolution":"4","location":"assets","locale":"","width":1636,"height":1098},"screenshot-5-es.jpg":{"filename":"screenshot-5-es.jpg","revision":3469763,"resolution":"5","location":"assets","locale":"es","width":1920,"height":1084},"screenshot-5.jpg":{"filename":"screenshot-5.jpg","revision":3469694,"resolution":"5","location":"assets","locale":"","width":1920,"height":1084},"screenshot-6-es.jpg":{"filename":"screenshot-6-es.jpg","revision":3469763,"resolution":"6","location":"assets","locale":"es","width":1920,"height":1084},"screenshot-6.jpg":{"filename":"screenshot-6.jpg","revision":3469694,"resolution":"6","location":"assets","locale":"","width":1920,"height":1084}},"screenshots":{"1":"Frontend display with card style","2":"Frontend display with minimal style","3":"Settings page - Display options","4":"Settings page - Appearance options","5":"Gutenberg block in editor","6":"Classic widget configuration"}},"plugin_section":[],"plugin_tags":[126393,11916,4928,25064,62829],"plugin_category":[],"plugin_contributors":[245779,133550],"plugin_business_model":[],"class_list":["post-283387","plugin","type-plugin","status-publish","hentry","plugin_tags-content-schedule","plugin_tags-editorial-calendar","plugin_tags-future-posts","plugin_tags-scheduled-posts","plugin_tags-upcoming-posts","plugin_contributors-ayudawp","plugin_contributors-fernandot","plugin_committers-ayudawp","plugin_committers-fernandot","plugin_support_reps-ayudawp"],"banners":{"banner":"https:\/\/ps.w.org\/scheduled-posts-showcase\/assets\/banner-772x250.jpg?rev=3470356","banner_2x":"https:\/\/ps.w.org\/scheduled-posts-showcase\/assets\/banner-1544x500.jpg?rev=3470356","banner_rtl":false,"banner_2x_rtl":false},"icons":{"svg":false,"icon":"https:\/\/ps.w.org\/scheduled-posts-showcase\/assets\/icon-128x128.jpg?rev=3469970","icon_2x":"https:\/\/ps.w.org\/scheduled-posts-showcase\/assets\/icon-256x256.jpg?rev=3469970","generated":false},"screenshots":[{"src":"https:\/\/ps.w.org\/scheduled-posts-showcase\/assets\/screenshot-1.jpg?rev=3469694","caption":"Frontend display with card style"},{"src":"https:\/\/ps.w.org\/scheduled-posts-showcase\/assets\/screenshot-2.jpg?rev=3469694","caption":"Frontend display with minimal style"},{"src":"https:\/\/ps.w.org\/scheduled-posts-showcase\/assets\/screenshot-3.jpg?rev=3469694","caption":"Settings page - Display options"},{"src":"https:\/\/ps.w.org\/scheduled-posts-showcase\/assets\/screenshot-4.jpg?rev=3469694","caption":"Settings page - Appearance options"},{"src":"https:\/\/ps.w.org\/scheduled-posts-showcase\/assets\/screenshot-5.jpg?rev=3469694","caption":"Gutenberg block in editor"},{"src":"https:\/\/ps.w.org\/scheduled-posts-showcase\/assets\/screenshot-6.jpg?rev=3469694","caption":"Classic widget configuration"}],"raw_content":"<!--section=description-->\n<p><strong>Scheduled Posts Showcase<\/strong> lets you display your scheduled (future) posts on the frontend of your WordPress site without creating problematic links to unpublished content.<\/p>\n\n<p>Unlike other solutions that link to scheduled posts and generate 404 errors for visitors, this plugin shows post information (title, date, excerpt, featured image, categories) without ever exposing the permalink or post ID.<\/p>\n\n<h4>Key Features<\/h4>\n\n<ul>\n<li><strong>No 404 errors<\/strong> - Never generates links to unpublished content<\/li>\n<li><strong>Multiple display methods<\/strong> - Use shortcode, widget, Gutenberg block, or REST API<\/li>\n<li><strong>Content filters<\/strong> - Pick what to list by taxonomy, author and post type<\/li>\n<li><strong>Fully customizable<\/strong> - Control what information to display and how it looks<\/li>\n<li><strong>Global settings with per-instance overrides<\/strong> - Set defaults once, customize where needed<\/li>\n<li><strong>Translation ready<\/strong> - Fully prepared for localization<\/li>\n<li><strong>Developer friendly<\/strong> - Extensive hooks for customization<\/li>\n<\/ul>\n\n<h4>Content Filters<\/h4>\n\n<p>Choose exactly which scheduled posts get listed:<\/p>\n\n<ul>\n<li><strong>Post types<\/strong> - One or several at a time, so posts, events and any other public post type can share the same list, plus an \"All content types\" box that also covers the ones registered later<\/li>\n<li><strong>Taxonomies<\/strong> - Categories, tags and any other public taxonomy, including the ones registered by your custom post types<\/li>\n<li><strong>Include or exclude<\/strong> - Show only the posts in the ticked terms, or hide them<\/li>\n<li><strong>Authors<\/strong> - Perfect for a \"coming soon\" section per columnist on multi-author sites<\/li>\n<\/ul>\n\n<p>Every filter starts on \"any\", so nothing is filtered until you untick one and pick what you want. Filters can be set globally in the settings page and overridden on each widget, block and shortcode.<\/p>\n\n<h4>Display Options<\/h4>\n\n<ul>\n<li>Number of posts to show<\/li>\n<li>Featured image at any registered size, including a responsive \"full width\" option that fills the container<\/li>\n<li>Scheduled publication date<\/li>\n<li>Post excerpt (with configurable word count)<\/li>\n<li>Categories<\/li>\n<li>Custom heading with selectable HTML tag (headings, paragraph, span or div)<\/li>\n<li>Custom footer content for calls to action<\/li>\n<li>Custom CSS classes on the main container, both globally and per instance<\/li>\n<\/ul>\n\n<h4>Appearance Options<\/h4>\n\n<ul>\n<li>Card or minimal container style<\/li>\n<li>Dashicon, theme default, or no list bullets<\/li>\n<li>Curated icon selector for list bullets<\/li>\n<li>Accent color customization<\/li>\n<li>Responsive design<\/li>\n<\/ul>\n\n<h4>Visibility Control<\/h4>\n\n<p>Choose who can see your scheduled posts:<\/p>\n\n<ul>\n<li>Everyone (public)<\/li>\n<li>Logged-in users only<\/li>\n<li>Editors and administrators only<\/li>\n<\/ul>\n\n<h4>Usage<\/h4>\n\n<p><strong>Shortcode:<\/strong><\/p>\n\n<pre><code>[scheduled-posts-showcase]\n<\/code><\/pre>\n\n<p>Without parameters it uses everything configured in Appearance \u2192 Scheduled Posts. With parameters:<\/p>\n\n<pre><code>[scheduled-posts-showcase count=\"3\" show_date=\"1\" show_excerpt=\"1\" container_style=\"card\"]\n<\/code><\/pre>\n\n<p>Filtering by content:<\/p>\n\n<pre><code>[scheduled-posts-showcase post_type=\"post,event\" categories=\"news,tutorials\" authors=\"fernando\" tax_mode=\"include\"]\n<\/code><\/pre>\n\n<ul>\n<li><code>post_type<\/code> - one slug, a comma-separated list, or <code>all<\/code> for every public post type<\/li>\n<li><code>categories<\/code> and <code>tags<\/code> - term IDs or slugs, comma-separated, or <code>all<\/code> to skip that filter<\/li>\n<li><code>tax_&lt;taxonomy&gt;<\/code> - any other taxonomy, for example <code>tax_genre=\"fiction,essay\"<\/code><\/li>\n<li><code>authors<\/code> - user IDs or nicenames, comma-separated, or <code>all<\/code> to skip that filter<\/li>\n<li><code>tax_mode<\/code> - <code>include<\/code> (default) or <code>exclude<\/code><\/li>\n<\/ul>\n\n<p>Attributes you do not write inherit the global settings, so <code>[scheduled-posts-showcase categories=\"news\"]<\/code> keeps everything else as configured.<\/p>\n\n<p><strong>Widget:<\/strong><\/p>\n\n<p>Add the \"Scheduled Posts Showcase\" widget to any widget area from Appearance \u2192 Widgets.<\/p>\n\n<p><strong>Gutenberg Block:<\/strong><\/p>\n\n<p>Search for \"Scheduled Posts\" in the block inserter and add the block to any post or page.<\/p>\n\n<p><strong>REST API:<\/strong><\/p>\n\n<pre><code>GET \/wp-json\/scheduled-posts-showcase\/v1\/scheduled-posts\n<\/code><\/pre>\n\n<p>Parameters: <code>per_page<\/code>, <code>fields<\/code>, <code>post_type<\/code> (comma-separated or <code>all<\/code>), <code>order<\/code>, <code>categories<\/code>, <code>tags<\/code>, <code>taxonomy<\/code>, <code>terms<\/code>, <code>authors<\/code>, <code>tax_mode<\/code>. Term and author parameters also accept <code>all<\/code> to skip that filter.<\/p>\n\n<pre><code>GET \/wp-json\/scheduled-posts-showcase\/v1\/scheduled-posts?post_type=post,event&amp;categories=news&amp;authors=12\n<\/code><\/pre>\n\n<h4>Why This Plugin?<\/h4>\n\n<p>Existing plugins for displaying scheduled posts either:<\/p>\n\n<ul>\n<li>Are abandoned (some over 10 years old)<\/li>\n<li>Link to scheduled posts, causing 404 errors<\/li>\n<li>Use deprecated WordPress functions<\/li>\n<li>Lack modern features like Gutenberg blocks<\/li>\n<\/ul>\n\n<p>Scheduled Posts Showcase solves all these problems with a modern, secure, and fully-featured solution.<\/p>\n\n<h3>CSS Customization<\/h3>\n\n<p>The plugin provides semantic CSS classes for easy customization.<\/p>\n\n<h4>Available CSS Classes<\/h4>\n\n<ul>\n<li><code>.sps-scheduled-posts<\/code> - Main container<\/li>\n<li><code>.sps-style-card<\/code> - Card style container<\/li>\n<li><code>.sps-style-minimal<\/code> - Minimal style container<\/li>\n<li><code>.sps-scheduled-heading<\/code> - Heading element<\/li>\n<li><code>.sps-scheduled-list<\/code> - Posts list (ul)<\/li>\n<li><code>.sps-list-dashicon<\/code> - List with dashicon bullets<\/li>\n<li><code>.sps-list-theme<\/code> - List with theme default bullets<\/li>\n<li><code>.sps-list-none<\/code> - List with no bullets<\/li>\n<li><code>.sps-scheduled-item<\/code> - Each post item (li)<\/li>\n<li><code>.sps-scheduled-icon<\/code> - Dashicon bullet<\/li>\n<li><code>.sps-scheduled-thumbnail<\/code> - Featured image container<\/li>\n<li><code>.sps-scheduled-thumbnail--full-width<\/code> - Added to the thumbnail container when the \"Full width\" image size is selected<\/li>\n<li><code>.sps-scheduled-title<\/code> - Post title<\/li>\n<li><code>.sps-scheduled-date<\/code> - Scheduled date<\/li>\n<li><code>.sps-scheduled-excerpt<\/code> - Post excerpt<\/li>\n<li><code>.sps-scheduled-categories<\/code> - Categories list<\/li>\n<li><code>.sps-scheduled-footer<\/code> - Custom footer content<\/li>\n<li><code>.sps-no-scheduled<\/code> - Empty state message<\/li>\n<\/ul>\n\n<h4>Example Customizations<\/h4>\n\n<pre><code>\/* Change font size for post titles *\/\n.sps-scheduled-title {\n    font-size: 1.1em;\n}\n\n\/* Add more padding to the card container *\/\n.sps-style-card {\n    padding: 1.5em;\n}\n\n\/* Custom color for the date *\/\n.sps-scheduled-date {\n    color: #666;\n    font-style: italic;\n}\n<\/code><\/pre>\n\n<h4>Custom CSS Classes<\/h4>\n\n<p>You can target a specific widget, block or shortcode without writing a long selector by adding your own classes:<\/p>\n\n<ul>\n<li><strong>Global<\/strong>: Appearance \u2192 Scheduled Posts \u2192 Appearance section \u2192 \"Custom CSS class\". Space-separated. Applied to every instance.<\/li>\n<li><p><strong>Per instance<\/strong>: each widget, block and shortcode has its own \"Extra CSS class\" field. These are appended to the global ones, never replace them.<\/p>\n\n<p>\/* Style a specific instance *\/\n.sps-scheduled-posts.sidebar-cta {\n    background: #fffbe6;\n    padding: 1.5em;\n}<\/p><\/li>\n<\/ul>\n\n<h4>CSS Custom Property<\/h4>\n\n<p>The accent color is available as a CSS custom property:<\/p>\n\n<pre><code>\/* Use the accent color in your custom styles *\/\n.my-custom-element {\n    border-color: var(--sps-accent-color);\n}&lt;h3&gt;Developer Hooks&lt;\/h3&gt;\n<\/code><\/pre>\n\n<p>The plugin provides filters and actions for developers to customize behavior without modifying plugin code.<\/p>\n\n<h4>Filters with Examples<\/h4>\n\n<p><strong>spscase_query_args<\/strong><\/p>\n\n<p>Modify WP_Query arguments before fetching scheduled posts.<\/p>\n\n<pre><code>add_filter( 'spscase_query_args', function( $args ) {\n    \/\/ Only show posts from specific category\n    $args['cat'] = 5;\n    return $args;\n} );\n<\/code><\/pre>\n\n<p><strong>spscase_post_data<\/strong><\/p>\n\n<p>Modify the data array for each post before rendering.<\/p>\n\n<pre><code>add_filter( 'spscase_post_data', function( $post_data, $post ) {\n    \/\/ Add custom field to post data\n    $post_data['reading_time'] = get_post_meta( $post-&gt;ID, 'reading_time', true );\n    return $post_data;\n}, 10, 2 );\n<\/code><\/pre>\n\n<p><strong>spscase_post_html<\/strong><\/p>\n\n<p>Modify the HTML output for each individual post item.<\/p>\n\n<pre><code>add_filter( 'spscase_post_html', function( $html, $post_data ) {\n    \/\/ Add reading time after the title\n    if ( ! empty( $post_data['reading_time'] ) ) {\n        $badge = '&lt;span class=\"reading-time\"&gt;' . esc_html( $post_data['reading_time'] ) . ' min read&lt;\/span&gt;';\n        $html = str_replace( '&lt;\/span class=\"sps-scheduled-title\"&gt;', '&lt;\/span&gt;' . $badge, $html );\n    }\n    return $html;\n}, 10, 2 );\n<\/code><\/pre>\n\n<p><strong>spscase_output_html<\/strong><\/p>\n\n<p>Modify the complete rendered HTML output.<\/p>\n\n<pre><code>add_filter( 'spscase_output_html', function( $html, $posts, $settings ) {\n    \/\/ Wrap output in custom container\n    return '&lt;div class=\"my-custom-wrapper\"&gt;' . $html . '&lt;\/div&gt;';\n}, 10, 3 );\n<\/code><\/pre>\n\n<p><strong>spscase_rest_post_data<\/strong><\/p>\n\n<p>Modify post data in REST API responses.<\/p>\n\n<pre><code>add_filter( 'spscase_rest_post_data', function( $post_data, $post ) {\n    \/\/ Add author name to API response\n    $post_data['author'] = get_the_author_meta( 'display_name', $post-&gt;post_author );\n    return $post_data;\n}, 10, 2 );\n<\/code><\/pre>\n\n<p><strong>spscase_excerpt_length<\/strong><\/p>\n\n<p>Override the excerpt word count.<\/p>\n\n<pre><code>add_filter( 'spscase_excerpt_length', function( $length ) {\n    \/\/ Shorter excerpts for sidebar widgets\n    return 15;\n} );\n<\/code><\/pre>\n\n<p><strong>spscase_date_format<\/strong><\/p>\n\n<p>Override the date format (default: WordPress date_format option). The special value <code>relative<\/code> renders the distance to the publication date (\"in 3 days\") and keeps the absolute date in the <code>title<\/code> attribute of the <code>&lt;time&gt;<\/code> element.<\/p>\n\n<pre><code>add_filter( 'spscase_date_format', function( $format ) {\n    \/\/ Show relative dates like \"in 3 days\"\n    return 'relative';\n} );\n<\/code><\/pre>\n\n<p><strong>spscase_post_types<\/strong><\/p>\n\n<p>Filter the available post types everywhere: settings page, widget, block, shortcode and REST API.<\/p>\n\n<pre><code>add_filter( 'spscase_post_types', function( $post_types ) {\n    \/\/ Remove 'page' from available post types\n    unset( $post_types['page'] );\n    return $post_types;\n} );\n<\/code><\/pre>\n\n<p><strong>spscase_filter_taxonomies<\/strong><\/p>\n\n<p>Filter which taxonomies are offered as content filters for a set of post types.<\/p>\n\n<pre><code>add_filter( 'spscase_filter_taxonomies', function( $taxonomies, $post_types ) {\n    \/\/ Do not offer tags as a filter\n    unset( $taxonomies['post_tag'] );\n    return $taxonomies;\n}, 10, 2 );\n<\/code><\/pre>\n\n<p><strong>spscase_term_taxonomies<\/strong><\/p>\n\n<p>Filter which taxonomies provide the terms displayed under each post.<\/p>\n\n<pre><code>add_filter( 'spscase_term_taxonomies', function( $taxonomies, $post ) {\n    \/\/ Show tags instead of categories\n    return array( 'post_tag' );\n}, 10, 2 );\n<\/code><\/pre>\n\n<p><strong>spscase_terms_limit<\/strong><\/p>\n\n<p>Maximum number of terms listed per taxonomy in the admin selectors (default: 200). Does not limit the query itself.<\/p>\n\n<pre><code>add_filter( 'spscase_terms_limit', function( $limit, $taxonomy ) {\n    return 'category' === $taxonomy ? 500 : $limit;\n}, 10, 2 );\n<\/code><\/pre>\n\n<p><strong>spscase_authors_limit<\/strong><\/p>\n\n<p>Maximum number of authors listed in the admin selectors (default: 200).<\/p>\n\n<pre><code>add_filter( 'spscase_authors_limit', function( $limit ) {\n    return 50;\n} );\n<\/code><\/pre>\n\n<p><strong>spscase_author_options<\/strong><\/p>\n\n<p>Filter the authors offered as a content filter.<\/p>\n\n<pre><code>add_filter( 'spscase_author_options', function( $authors ) {\n    \/\/ Only keep a given set of columnists\n    return array_intersect_key( $authors, array_flip( array( 3, 7, 12 ) ) );\n} );\n<\/code><\/pre>\n\n<p><strong>spscase_cache_expiration<\/strong><\/p>\n\n<p>Modify cache duration in seconds (default: 3600 = 1 hour).<\/p>\n\n<pre><code>add_filter( 'spscase_cache_expiration', function( $seconds ) {\n    \/\/ Cache for 6 hours on high-traffic sites\n    return 6 * HOUR_IN_SECONDS;\n} );\n<\/code><\/pre>\n\n<p><strong>spscase_allowed_footer_html<\/strong><\/p>\n\n<p>Modify allowed HTML tags for footer content.<\/p>\n\n<pre><code>add_filter( 'spscase_allowed_footer_html', function( $allowed_tags ) {\n    \/\/ Allow button element in footer\n    $allowed_tags['button'] = array(\n        'class' =&gt; true,\n        'type'  =&gt; true,\n    );\n    return $allowed_tags;\n} );\n<\/code><\/pre>\n\n<h4>Actions with Examples<\/h4>\n\n<p><strong>spscase_before_output<\/strong><\/p>\n\n<p>Fires before the scheduled posts list renders.<\/p>\n\n<pre><code>add_action( 'spscase_before_output', function( $posts, $settings ) {\n    \/\/ Track impressions\n    if ( function_exists( 'my_track_impression' ) ) {\n        my_track_impression( 'scheduled_posts_widget' );\n    }\n}, 10, 2 );\n<\/code><\/pre>\n\n<p><strong>spscase_after_output<\/strong><\/p>\n\n<p>Fires after the scheduled posts list renders.<\/p>\n\n<pre><code>add_action( 'spscase_after_output', function( $posts, $settings ) {\n    \/\/ Output additional content after the list\n    echo '&lt;p class=\"sps-custom-note\"&gt;Updated hourly&lt;\/p&gt;';\n}, 10, 2 );&lt;h3&gt;Support&lt;\/h3&gt;\n<\/code><\/pre>\n\n<p>Need private support or custom development?<\/p>\n\n<p>Do you need one-on-one help, priority troubleshooting, or a custom feature, integration, or tweak built specifically for your site? I offer private support and custom development. Just <a href=\"mailto:scheduled-posts-showcase@ayudawp.com\">contact me<\/a> and tell me what you need.<\/p>\n\n<p>Need help or have suggestions?<\/p>\n\n<ul>\n<li><a href=\"https:\/\/servicios.ayudawp.com\">Official website<\/a><\/li>\n<li><a href=\"https:\/\/wordpress.org\/support\/plugin\/scheduled-posts-showcase\/\">WordPress support forum<\/a><\/li>\n<li><a href=\"https:\/\/www.youtube.com\/AyudaWordPressES\">YouTube channel<\/a><\/li>\n<li><a href=\"https:\/\/ayudawp.com\">Documentation and tutorials<\/a><\/li>\n<\/ul>\n\n<p>Love the plugin? Please leave us a 5-star review and help spread the word!<\/p>\n\n<h3>About AyudaWP<\/h3>\n\n<p>We are specialists in WordPress security, SEO, AI and performance optimization plugins. We create tools that solve real problems for WordPress site owners while maintaining the highest coding standards and accessibility requirements.<\/p>\n\n<!--section=installation-->\n<ol>\n<li>Upload the plugin files to <code>\/wp-content\/plugins\/scheduled-posts-showcase\/<\/code> or install directly from the WordPress plugin repository.<\/li>\n<li>Activate the plugin through the 'Plugins' menu in WordPress.<\/li>\n<li>Configure global settings at Appearance \u2192 Scheduled Posts.<\/li>\n<li>Add the widget, block, or shortcode wherever you want to display scheduled posts.<\/li>\n<\/ol>\n\n<!--section=faq-->\n<dl>\n<dt id=\"why%20don%27t%20the%20posts%20have%20links%3F\"><h3>Why don't the posts have links?<\/h3><\/dt>\n<dd><p>By design, this plugin never creates links to scheduled posts. Linking to unpublished content causes 404 errors for visitors, which is bad for user experience and SEO. Instead, the plugin shows post information to build anticipation without broken links.<\/p><\/dd>\n<dt id=\"can%20i%20show%20scheduled%20posts%20for%20custom%20post%20types%3F\"><h3>Can I show scheduled posts for custom post types?<\/h3><\/dt>\n<dd><p>Yes! Select any public post type from the settings page, or several at once, and specify them in the shortcode with <code>post_type=\"your_post_type\"<\/code> or <code>post_type=\"post,your_post_type\"<\/code>.<\/p><\/dd>\n<dt id=\"can%20i%20show%20only%20the%20scheduled%20posts%20of%20one%20category%20or%20author%3F\"><h3>Can I show only the scheduled posts of one category or author?<\/h3><\/dt>\n<dd><p>Yes. The settings page has a \"Content filters\" section where you untick the \"Any category\" or \"Any author\" box and pick what you want, and decide whether the ticked terms are shown or hidden. Every widget, block and shortcode can override those filters with its own.<\/p><\/dd>\n<dt id=\"why%20don%27t%20i%20see%20the%20terms%20of%20my%20custom%20taxonomy%20under%20each%20post%3F\"><h3>Why don't I see the terms of my custom taxonomy under each post?<\/h3><\/dt>\n<dd><p>Each post type shows the terms of its own hierarchical taxonomies, and falls back to the flat ones when it has none. If you need a different set, use the <code>spscase_term_taxonomies<\/code> filter.<\/p><\/dd>\n<dt id=\"does%20the%20plugin%20work%20with%20redis%20or%20memcached%3F\"><h3>Does the plugin work with Redis or Memcached?<\/h3><\/dt>\n<dd><p>Yes. The cache is invalidated by versioning its key, so scheduling or publishing a post refreshes the list immediately with any object cache backend.<\/p><\/dd>\n<dt id=\"how%20do%20i%20customize%20the%20appearance%3F\"><h3>How do I customize the appearance?<\/h3><\/dt>\n<dd><p>Use the settings page to configure global defaults for appearance. You can also override settings on individual instances (widget, block, shortcode). For advanced customization, use the CSS classes documented below.<\/p><\/dd>\n<dt id=\"is%20the%20rest%20api%20public%3F\"><h3>Is the REST API public?<\/h3><\/dt>\n<dd><p>The REST API respects the same visibility settings as the other display methods. If you restrict visibility to logged-in users or editors, the API will also require authentication.<\/p><\/dd>\n<dt id=\"can%20i%20filter%20or%20modify%20the%20output%3F\"><h3>Can I filter or modify the output?<\/h3><\/dt>\n<dd><p>Yes! The plugin provides extensive hooks for developers. See the Developer Hooks section below for all available filters and actions with usage examples.<\/p><\/dd>\n\n<\/dl>\n\n<!--section=changelog-->\n<h4>1.3.0<\/h4>\n\n<ul>\n<li>New: content filters by taxonomy. Show only the scheduled posts of the categories, tags or any other public taxonomy you pick, with an include or exclude mode, from the settings page, the widget, the block, the shortcode and the REST API.<\/li>\n<li>New: author filter, to build sections per columnist on multi-author sites.<\/li>\n<li>New: several post types at once. The post type selector is now multiple, so posts, events or any other public post type can share the same list.<\/li>\n<li>New: \"All content types\" option, which also covers post types registered later, so a plugin installed tomorrow starts being listed without touching the settings again.<\/li>\n<li>New: shortcode attributes <code>categories<\/code>, <code>tags<\/code>, <code>tax_&lt;taxonomy&gt;<\/code>, <code>authors<\/code> and <code>tax_mode<\/code>, and <code>post_type<\/code> now accepts a comma-separated list. Terms and authors can be written as IDs or as slugs, and any of them accepts \"all\" to skip that filter.<\/li>\n<li>New: REST parameters <code>categories<\/code>, <code>tags<\/code>, <code>taxonomy<\/code>, <code>terms<\/code>, <code>authors<\/code> and <code>tax_mode<\/code>, and <code>post_type<\/code> now accepts a comma-separated list or \"all\".<\/li>\n<li>New: <code>spscase_filter_taxonomies<\/code>, <code>spscase_term_taxonomies<\/code>, <code>spscase_terms_limit<\/code>, <code>spscase_authors_limit<\/code> and <code>spscase_author_options<\/code> filters.<\/li>\n<li>Improved: the settings page is now Appearance &gt; Scheduled Posts. It was labelled \"Future Posts\", which did not match the plugin name anywhere else. The page slug is unchanged, so existing bookmarks and links keep working.<\/li>\n<li>Improved: \"Show categories\" now lists the terms of the taxonomies of each post type, so custom post types show their own terms instead of nothing.<\/li>\n<li>Improved: the <code>spscase_post_types<\/code> filter now applies to every surface (settings, widget, block, shortcode and REST), not just to the settings dropdown.<\/li>\n<li>Improved: the cache is also refreshed when the terms of a scheduled post change outside a post save (bulk edit, WP-CLI, REST) and when a scheduled post is permanently deleted.<\/li>\n<li>Fix: the shortcode ignored the global settings and always started from the factory defaults. A bare <code>[scheduled-posts-showcase]<\/code> now inherits what is configured in Appearance &gt; Scheduled Posts, like the widget and the block already did, including the accent color.<\/li>\n<li>Fix: cache invalidation had no effect on sites with a persistent object cache (Redis, Memcached), where transients never reach wp_options, so a newly scheduled post could take up to an hour to show up. The cache key is versioned now, which works with any backend.<\/li>\n<li>Fix: the <code>relative<\/code> value documented for the <code>spscase_date_format<\/code> filter broke the output. It now renders \"in 3 days\" and keeps the absolute date in the title attribute of the time element.<\/li>\n<li>Fix: dates were built from the local date string, which shifted the displayed time by the site UTC offset when the format included hours.<\/li>\n<li>Fix: password-protected scheduled posts no longer expose their title and excerpt.<\/li>\n<li>Fix: removed an orphan editor script left behind by 1.1.0, the AJAX localization of the admin script that had no handler, and the Thickbox loading, unused since the promo sidebar dropped the plugin install modals.<\/li>\n<li>Fix: uninstalling no longer flushes the whole site object cache, and it cleans up its own cache version option and activation transient.<\/li>\n<\/ul>\n\n<p>For older changelog entries, please check the <a href=\"https:\/\/plugins.svn.wordpress.org\/scheduled-posts-showcase\/trunk\/changelog.txt\">changelog.txt<\/a> file<\/p>","raw_excerpt":"Display your scheduled and future posts on the frontend without generating 404 links. Show visitors what&#039;s coming next.","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/el.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin\/283387","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/el.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin"}],"about":[{"href":"https:\/\/el.wordpress.org\/plugins\/wp-json\/wp\/v2\/types\/plugin"}],"replies":[{"embeddable":true,"href":"https:\/\/el.wordpress.org\/plugins\/wp-json\/wp\/v2\/comments?post=283387"}],"author":[{"embeddable":true,"href":"https:\/\/el.wordpress.org\/plugins\/wp-json\/wporg\/v1\/users\/fernandot"}],"wp:attachment":[{"href":"https:\/\/el.wordpress.org\/plugins\/wp-json\/wp\/v2\/media?parent=283387"}],"wp:term":[{"taxonomy":"plugin_section","embeddable":true,"href":"https:\/\/el.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_section?post=283387"},{"taxonomy":"plugin_tags","embeddable":true,"href":"https:\/\/el.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_tags?post=283387"},{"taxonomy":"plugin_category","embeddable":true,"href":"https:\/\/el.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_category?post=283387"},{"taxonomy":"plugin_contributors","embeddable":true,"href":"https:\/\/el.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_contributors?post=283387"},{"taxonomy":"plugin_business_model","embeddable":true,"href":"https:\/\/el.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_business_model?post=283387"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}