
內容簡介
Scheduled Posts Showcase 讓您在 WordPress 網站前端顯示已排程的文章,而不會產生指向未發佈內容的問題連結。此外掛可顯示文章資訊,如標題、日期、摘要、特色圖片及分類,並避免顯示永久連結或文章 ID。
【主要功能】
• 無 404 錯誤 - 不會生成未發佈內容的連結
• 多種顯示方式 - 支援短碼、小工具、Gutenberg 區塊或 REST API
• 內容篩選 - 可依分類、作者及文章類型篩選顯示
• 完全可自訂 - 控制顯示資訊及外觀
• 全球設定與實例覆蓋 - 一次設定,隨處自訂
• 翻譯準備 - 完全支援本地化
外掛標籤
開發者團隊
原文外掛簡介
Scheduled Posts Showcase lets you display your scheduled (future) posts on the frontend of your WordPress site without creating problematic links to unpublished content.
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.
Key Features
No 404 errors – Never generates links to unpublished content
Multiple display methods – Use shortcode, widget, Gutenberg block, or REST API
Content filters – Pick what to list by taxonomy, author and post type
Fully customizable – Control what information to display and how it looks
Global settings with per-instance overrides – Set defaults once, customize where needed
Translation ready – Fully prepared for localization
Developer friendly – Extensive hooks for customization
Content Filters
Choose exactly which scheduled posts get listed:
Post types – 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
Taxonomies – Categories, tags and any other public taxonomy, including the ones registered by your custom post types
Include or exclude – Show only the posts in the ticked terms, or hide them
Authors – Perfect for a “coming soon” section per columnist on multi-author sites
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.
Display Options
Number of posts to show
Featured image at any registered size, including a responsive “full width” option that fills the container
Scheduled publication date
Post excerpt (with configurable word count)
Categories
Custom heading with selectable HTML tag (headings, paragraph, span or div)
Custom footer content for calls to action
Custom CSS classes on the main container, both globally and per instance
Appearance Options
Card or minimal container style
Dashicon, theme default, or no list bullets
Curated icon selector for list bullets
Accent color customization
Responsive design
Visibility Control
Choose who can see your scheduled posts:
Everyone (public)
Logged-in users only
Editors and administrators only
Usage
Shortcode:
[scheduled-posts-showcase]
Without parameters it uses everything configured in Appearance → Scheduled Posts. With parameters:
[scheduled-posts-showcase count="3" show_date="1" show_excerpt="1" container_style="card"]
Filtering by content:
[scheduled-posts-showcase post_type="post,event" categories="news,tutorials" authors="fernando" tax_mode="include"]
post_type – one slug, a comma-separated list, or all for every public post type
categories and tags – term IDs or slugs, comma-separated, or all to skip that filter
tax_
authors – user IDs or nicenames, comma-separated, or all to skip that filter
tax_mode – include (default) or exclude
Attributes you do not write inherit the global settings, so [scheduled-posts-showcase categories="news"] keeps everything else as configured.
Widget:
Add the “Scheduled Posts Showcase” widget to any widget area from Appearance → Widgets.
Gutenberg Block:
Search for “Scheduled Posts” in the block inserter and add the block to any post or page.
REST API:
GET /wp-json/scheduled-posts-showcase/v1/scheduled-posts
Parameters: per_page, fields, post_type (comma-separated or all), order, categories, tags, taxonomy, terms, authors, tax_mode. Term and author parameters also accept all to skip that filter.
GET /wp-json/scheduled-posts-showcase/v1/scheduled-posts?post_type=post,event&categories=news&authors=12
Why This Plugin?
Existing plugins for displaying scheduled posts either:
Are abandoned (some over 10 years old)
Link to scheduled posts, causing 404 errors
Use deprecated WordPress functions
Lack modern features like Gutenberg blocks
Scheduled Posts Showcase solves all these problems with a modern, secure, and fully-featured solution.
CSS Customization
The plugin provides semantic CSS classes for easy customization.
Available CSS Classes
.sps-scheduled-posts – Main container
.sps-style-card – Card style container
.sps-style-minimal – Minimal style container
.sps-scheduled-heading – Heading element
.sps-scheduled-list – Posts list (ul)
.sps-list-dashicon – List with dashicon bullets
.sps-list-theme – List with theme default bullets
.sps-list-none – List with no bullets
.sps-scheduled-item – Each post item (li)
.sps-scheduled-icon – Dashicon bullet
.sps-scheduled-thumbnail – Featured image container
.sps-scheduled-thumbnail--full-width – Added to the thumbnail container when the “Full width” image size is selected
.sps-scheduled-title – Post title
.sps-scheduled-date – Scheduled date
.sps-scheduled-excerpt – Post excerpt
.sps-scheduled-categories – Categories list
.sps-scheduled-footer – Custom footer content
.sps-no-scheduled – Empty state message
Example Customizations
/* Change font size for post titles */
.sps-scheduled-title {
font-size: 1.1em;
}
/* Add more padding to the card container */
.sps-style-card {
padding: 1.5em;
}
/* Custom color for the date */
.sps-scheduled-date {
color: #666;
font-style: italic;
}
Custom CSS Classes
You can target a specific widget, block or shortcode without writing a long selector by adding your own classes:
Global: Appearance → Scheduled Posts → Appearance section → “Custom CSS class”. Space-separated. Applied to every instance.
Per instance: each widget, block and shortcode has its own “Extra CSS class” field. These are appended to the global ones, never replace them.
/* Style a specific instance */
.sps-scheduled-posts.sidebar-cta {
background: #fffbe6;
padding: 1.5em;
}
CSS Custom Property
The accent color is available as a CSS custom property:
/* Use the accent color in your custom styles */
.my-custom-element {
border-color: var(--sps-accent-color);
}
Developer Hooks
The plugin provides filters and actions for developers to customize behavior without modifying plugin code.
Filters with Examples
spscase_query_args
Modify WP_Query arguments before fetching scheduled posts.
add_filter( 'spscase_query_args', function( $args ) {
// Only show posts from specific category
$args['cat'] = 5;
return $args;
} );
spscase_post_data
Modify the data array for each post before rendering.
add_filter( 'spscase_post_data', function( $post_data, $post ) {
// Add custom field to post data
$post_data['reading_time'] = get_post_meta( $post->ID, 'reading_time', true );
return $post_data;
}, 10, 2 );
spscase_post_html
Modify the HTML output for each individual post item.
add_filter( 'spscase_post_html', function( $html, $post_data ) {
// Add reading time after the title
if ( ! empty( $post_data['reading_time'] ) ) {
$badge = '' . esc_html( $post_data['reading_time'] ) . ' min read';
$html = str_replace( '', '' . $badge, $html );
}
return $html;
}, 10, 2 );
spscase_output_html
Modify the complete rendered HTML output.
add_filter( 'spscase_output_html', function( $html, $posts, $settings ) {
// Wrap output in custom container
return '
';
}, 10, 3 );
spscase_rest_post_data
Modify post data in REST API responses.
add_filter( 'spscase_rest_post_data', function( $post_data, $post ) {
// Add author name to API response
$post_data['author'] = get_the_author_meta( 'display_name', $post->post_author );
return $post_data;
}, 10, 2 );
spscase_excerpt_length
Override the excerpt word count.
add_filter( 'spscase_excerpt_length', function( $length ) {
// Shorter excerpts for sidebar widgets
return 15;
} );
spscase_date_format
Override the date format (default: WordPress date_format option). The special value relative renders the distance to the publication date (“in 3 days”) and keeps the absolute date in the title attribute of the
spscase_post_types
Filter the available post types everywhere: settings page, widget, block, shortcode and REST API.
add_filter( 'spscase_post_types', function( $post_types ) {
// Remove 'page' from available post types
unset( $post_types['page'] );
return $post_types;
} );
spscase_filter_taxonomies
Filter which taxonomies are offered as content filters for a set of post types.
add_filter( 'spscase_filter_taxonomies', function( $taxonomies, $post_types ) {
// Do not offer tags as a filter
unset( $taxonomies['post_tag'] );
return $taxonomies;
}, 10, 2 );
spscase_term_taxonomies
Filter which taxonomies provide the terms displayed under each post.
add_filter( 'spscase_term_taxonomies', function( $taxonomies, $post ) {
// Show tags instead of categories
return array( 'post_tag' );
}, 10, 2 );
spscase_terms_limit
Maximum number of terms listed per taxonomy in the admin selectors (default: 200). Does not limit the query itself.
add_filter( 'spscase_terms_limit', function( $limit, $taxonomy ) {
return 'category' === $taxonomy ? 500 : $limit;
}, 10, 2 );
spscase_authors_limit
Maximum number of authors listed in the admin selectors (default: 200).
add_filter( 'spscase_authors_limit', function( $limit ) {
return 50;
} );
spscase_author_options
Filter the authors offered as a content filter.
add_filter( 'spscase_author_options', function( $authors ) {
// Only keep a given set of columnists
return array_intersect_key( $authors, array_flip( array( 3, 7, 12 ) ) );
} );
spscase_cache_expiration
Modify cache duration in seconds (default: 3600 = 1 hour).
add_filter( 'spscase_cache_expiration', function( $seconds ) {
// Cache for 6 hours on high-traffic sites
return 6 * HOUR_IN_SECONDS;
} );
spscase_allowed_footer_html
Modify allowed HTML tags for footer content.
add_filter( 'spscase_allowed_footer_html', function( $allowed_tags ) {
// Allow button element in footer
$allowed_tags['button'] = array(
'class' => true,
'type' => true,
);
return $allowed_tags;
} );
Actions with Examples
spscase_before_output
Fires before the scheduled posts list renders.
add_action( 'spscase_before_output', function( $posts, $settings ) {
// Track impressions
if ( function_exists( 'my_track_impression' ) ) {
my_track_impression( 'scheduled_posts_widget' );
}
}, 10, 2 );
spscase_after_output
Fires after the scheduled posts list renders.
add_action( 'spscase_after_output', function( $posts, $settings ) {
// Output additional content after the list
echo '
Updated hourly
';
}, 10, 2 );
Support
Need private support or custom development?
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 contact me and tell me what you need.
Need help or have suggestions?
Official website
WordPress support forum
YouTube channel
Documentation and tutorials
Love the plugin? Please leave us a 5-star review and help spread the word!
About AyudaWP
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.
