WordPress.org Plugin Compliance Guidelines
Ensures WordPress.org compliance for plugin directory guidelines, particularly around free vs premium code and upselling practices.
When to Use This Skill
Trigger scenarios:
-
Adding new features that might have premium versions
-
Implementing upselling or upgrade prompts
-
Creating "teasers" for premium features
-
Reviewing code for WordPress.org compliance
-
Preparing plugin updates for WordPress.org submission
-
Adding license key validation or premium checks
Core Rule: No Locked Code
WordPress.org Golden Rule: No premium/locked code in wp.org plugins. All hosted code must be free and fully functional.
This means:
-
Every feature in the free plugin must work completely without a license key
-
No "trial periods" or usage limits
-
No features that require payment to unlock
-
No functionality restricted behind a paywall
Quick Reference
❌ NOT Allowed
-
Trial periods or time limits
-
Usage quotas or artificial limits
-
License keys for local features
-
Disabled features requiring payment
-
Crippled functionality in free version
-
Intrusive nag screens
✅ Allowed
-
Informational upselling (non-intrusive)
-
Separate premium plugin from your site
-
Feature detection (not restriction)
-
External SaaS integrations
-
Comparison tables
-
Premium feature teasers
-
Disabled form teasers for premium-only features (high conversion)
Key Patterns
❌ Wrong: Feature Restriction
// Blocks functionality without license if ( ! $this->is_premium() ) { echo 'Premium required'; return; }
✅ Correct: Feature Detection
// Free version works fully $this->show_basic_export();
// Premium can enhance if ( $this->has_premium_addon() ) { do_action( 'sh_premium_export_options' ); }
❌ Wrong: Artificial Limits
// Artificially limits free version $limit = $this->is_premium() ? 10000 : 100;
✅ Correct: No Artificial Limits
// Free version has reasonable limit $limit = 10000;
// Premium can extend $limit = apply_filters( 'sh_event_limit', $limit );
Recommended Freemium Model
Free Plugin (WordPress.org)
-
Core functionality fully working
-
Basic features complete
-
All UI features accessible
-
No artificial limitations
Premium Plugin (Your Site)
-
Extended features (not unlocked basics)
-
Premium integrations
-
Advanced functionality
-
Priority support
Installation Options
Add-on Style (Recommended):
-
Free: Standalone and functional
-
Premium: Installs alongside, extends free
-
Both active together
Replacement Style:
-
Free: Standalone and functional
-
Premium: Replaces free with more features
-
User deactivates free when installing premium
Upselling Best Practices
✅ Good Upselling
// Subtle, informational function render_premium_note() { ?> <p class="sh-premium-note"> <small> 💡 Premium: Export to JSON, XML, or PDF formats. <a href="https://example.com/premium/">Learn more</a> </small> </p> <?php }
✅ High-Converting: Disabled Form Pattern
For premium-only features, show a disabled form that previews the UI:
// Shows what premium feature looks like (greyed out, non-functional) // CTA box remains clickable - converts 3-4x better than info box <div class="sh-PremiumTeaser-disabledForm" style="opacity: 0.6; pointer-events: none;"> <table class="form-table"> <tr><th>Setting</th><td><select disabled>...</select></td></tr> </table> <div style="pointer-events: auto; opacity: 1;"> <?php echo Helpers::get_premium_feature_teaser(...); ?> </div> </div>
See examples.md for full implementation details.
❌ Bad Upselling
// Blocks functionality if ( ! $this->is_premium() ) { echo '<div class="error">Upgrade required!</div>'; return; }
Compliance Checklist
Before submitting updates to WordPress.org:
-
All features work without license key
-
No trial periods or time limits
-
No usage quotas or restrictions
-
No features disabled for free users
-
Upselling is informational, not obstructive
-
Premium features are separate addon
-
No "locked" UI elements
-
Free version provides real value
Code Review Questions
For each feature, ask yourself:
-
Does it work completely without premium?
-
Am I checking for a license key to enable functionality?
-
Would a free user be frustrated by this?
-
Is the upselling helpful or annoying?
-
Does the free version provide real value?
Common Violations
Violation 1: Nag Screens
❌ Don't show constant popups asking users to upgrade
Violation 2: Crippled Features
❌ Don't make features "work badly" in free to force upgrades
Violation 3: Expired Trials
❌ Don't stop working after X days
Violation 4: Usage Limits
❌ Don't impose artificial quotas
Violation 5: License Validation for Local Features
❌ Don't require license key for features that run locally
Detailed Information
For comprehensive examples and testing procedures:
-
See examples.md for detailed code examples of allowed and forbidden patterns
-
See testing.md for complete testing procedures, code review checklists, and pre-submission verification
Resources
-
Official Guidelines: https://developer.wordpress.org/plugins/wordpress-org/detailed-plugin-guidelines/#5-trialware-is-not-permitted
-
WordPress.org Plugin Directory: https://wordpress.org/plugins/
-
Plugin Review Team: For questions about compliance
Summary
The Simple Rule: If it's in the WordPress.org version, it must work completely without payment.
The Philosophy: Win users over with quality, not restrictions. Make them want premium, not need it.
The Test: Would you be happy using the free version? If not, you're doing freemium wrong.