Schedulely
Intelligently schedule posts from any status with smart deficit tracking, random author assignment, and customizable time windows.
by Krafty Sprouts Media, LLC · github.com/krafty-sprouts-media-llc/schedulely · website
Install
The author publishes release zips, so WP-CLI can install straight from GitHub:
wp plugin install https://github.com/krafty-sprouts-media-llc/schedulely/releases/download/v1.8.11/schedulely-1.8.11.zipReadme
Schedulely
WordPress plugin for intelligent post scheduling with multiple scheduling algorithms, AI-powered queue ordering, and flexible automation.
Version: 1.6.0 · Requires WP: 6.8 · Requires PHP: 8.2 · License: GPL v2 or later
What it does
Schedulely takes posts in a configurable status (draft, pending, etc.) and assigns them future publish times within a configurable daily time window, respecting quotas, minimum intervals between posts, and active weekdays.
Scheduling modes
| Mode | How it works | Efficiency |
|---|---|---|
| Random | Posts land at random times in the window | ~70% — organic appearance |
| Sequential | Perfectly even spacing across the window | 100% — predictable |
| Hybrid | Window divided into equal slots, random time within each slot | ~95% — even distribution, natural appearance |
Other features
- AI queue ordering — reorders the post pool by title similarity before scheduling, so series posts are spaced apart (WP 7.0 native or legacy DeepSeek/OpenAI-compatible API)
- Random author assignment with excluded and preserved author lists
- Configurable pool size — how many eligible posts are loaded per run
- Auto-schedule via WP-Cron (
twicedaily) or manualSchedule Nowbutton - Email notifications with optional AI-generated summary (WP 7.0+)
- Multi-post-type support
- Overnight time windows (e.g. 10pm–3am)
- WordPress Abilities — exposes scheduling actions to the WP 7.0 command palette, REST API, and AI agents
Requirements
- WordPress: 6.8+
- PHP: 8.2+
Installation
# Via WP-CLI
wp plugin install schedulely.zip --activate
# Or upload via Plugins → Add New → Upload Plugin
Go to Tools → Schedulely to configure.
File structure
schedulely/
├── schedulely.php # Bootstrap, constants, cron, activation
├── uninstall.php # Cleanup on delete
├── readme.txt # wp.org listing
├── assets/
│ ├── css/admin.css
│ ├── js/admin.js
│ └── vendor/ # Vendored: SweetAlert2, Select2, Flatpickr
├── includes/
│ ├── autoloader.php # spl_autoload_register for Schedulely_* classes
│ ├── class-defaults.php # All option defaults as constants
│ ├── class-scheduler.php # Core scheduling engine (Random/Sequential/Hybrid)
│ ├── class-ai-order.php # AI queue ordering (WP 7.0 + legacy paths)
│ ├── class-author-manager.php # Random/preserved author assignment
│ ├── class-notifications.php # Email notifications
│ ├── class-settings.php # Sanitizers, form handler, renderer coordinator
│ ├── class-admin-menu.php # Admin menu registration
│ ├── class-admin-assets.php # Asset enqueuing
│ ├── class-admin-notices.php # Welcome notice
│ ├── class-ajax-handlers.php # All AJAX + admin-post handlers
│ └── class-abilities.php # WP 7.0 Abilities registration
├── templates/
│ └── admin/settings-page.php # Settings page HTML template
└── languages/schedulely.pot
Developer hooks
Filters
// Maximum posts loaded per scheduling run (default 1500)
add_filter( 'schedulely_max_posts_per_run', fn() => 500 );
// Override scheduling efficiency (for custom capacity display)
add_filter( 'schedulely_capacity_efficiency', fn( $eff ) => 0.8, 10, 5 );
// Override AI model preferences for reordering
add_filter( 'wpai_preferred_text_models', function( $models ) {
if ( ! did_action( 'schedulely_pre_ai_reorder' ) ) return $models;
return [ [ 'deepseek', 'deepseek-v4-flash' ], ... ];
} );
// Gate premium features (pro plugin hooks these)
add_filter( 'schedulely_feature_ai_ordering', '__return_false' );
add_filter( 'schedulely_feature_scheduling_modes', '__return_false' );
// Safety buffer before the window opens (default 30 min)
add_filter( 'schedulely_schedule_safety_buffer_seconds', fn() => 900 );
Actions
// Fires just before AI reorder request — use to register model preferences
add_action( 'schedulely_pre_ai_reorder', function() { ... } );
// Third-party cache invalidation after scheduling pass
add_action( 'schedulely_clear_cache', function() { ... } );
WordPress Abilities (WP 7.0+)
| Ability slug | What it does |
|---|---|
schedulely/run-schedule |
Trigger a scheduling pass |
schedulely/check-capacity |
Check if settings fit the quota |
schedulely/get-furthest-scheduled-date |
Get the furthest future date |
schedulely/preview-next-slot |
Preview next N datetimes without committing |
schedulely/run-ai-reorder |
Preview AI queue ordering without scheduling |
// Call from PHP
$result = wp_get_ability( 'schedulely/run-schedule' )->execute( [ 'dry_run' => true ] );
WP-Cron
- Hook:
schedulely_auto_schedule - Recurrence:
twicedaily(~every 12 hours) - Trigger:
wp cron event run schedulely_auto_schedule
Debugging
// wp-config.php
define( 'WP_DEBUG', true );
define( 'WP_DEBUG_LOG', true );
// Schedulely logs to wp-content/debug.log with prefix [Schedulely]
Support
- Website: kraftysprouts.com
- Email: support@kraftysprouts.com
Read the full README on GitHub →
Releases
| Tag | Published | Asset | Downloads |
|---|---|---|---|
| v1.8.11 | Jun 28, 2026 | schedulely-1.8.11.zip | 2 |
| v1.8.7 | Jun 28, 2026 | schedulely-1.8.7.zip | 1 |
| v1.7.10 | May 28, 2026 | schedulely-1.7.10.zip | 6 |
| v1.7.9 | May 28, 2026 | schedulely-1.7.9.zip | 0 |
| v1.7.8 | May 28, 2026 | schedulely-1.7.8.zip | 0 |
| v1.7.7 | May 28, 2026 | schedulely-1.7.7.zip | 0 |
| v1.7.6 | May 28, 2026 | schedulely-1.7.6.zip | 0 |
| v1.7.5 | May 28, 2026 | schedulely-1.7.5.zip | 3 |
| v1.7.4 | May 28, 2026 | schedulely-1.7.4.zip | 1 |
| v1.7.3 | May 28, 2026 | schedulely-1.7.3.zip | 2 |
| v1.7.2 | May 28, 2026 | schedulely-1.7.2.zip | 1 |
| v1.7.1 | May 28, 2026 | schedulely-1.7.1.zip | 0 |
| v1.7.0 | May 28, 2026 | schedulely-1.7.0.zip | 0 |
| v1.6.2 | May 27, 2026 | schedulely-1.6.2.zip | 0 |
| v1.6.0 | May 27, 2026 | schedulely-1.6.0.zip | 0 |
| v1.5.10 | May 12, 2026 | schedulely-1.5.10.zip | 5 |
| v1.5.9 | May 3, 2026 | schedulely-1.5.9.zip | 6 |
| v1.5.8 | May 3, 2026 | schedulely-1.5.8.zip | 0 |
| v1.5.5 | May 3, 2026 | schedulely-1.5.5.zip | 1 |
| v1.5.2 | May 3, 2026 | schedulely-1.5.2.zip | 1 |
| v1.5.1 | May 3, 2026 | schedulely-1.5.1.zip | 0 |
| v1.5.0 | May 3, 2026 | schedulely-1.5.0.zip | 1 |
| v1.4.8 | May 3, 2026 | schedulely-1.4.8.zip | 5 |
| v1.4.7 | May 3, 2026 | schedulely-1.4.7.zip | 3 |
| v1.4.6 | May 3, 2026 | schedulely-1.4.6.zip | 3 |