Story Submission System
PostGate Manager is a powerful WordPress plugin that enables user registration, admin approval, and frontend post or story submission with full control and security.
by Your Name · github.com/bikasraj/postgate-manager · website
★ 0stars
0forks
Install
No release zip yet. The repository archive installs, but the folder name will carry the branch suffix and updates will not flow:
wp plugin install https://github.com/bikasraj/postgate-manager/archive/refs/heads/main.zipStory Submission System — WordPress Plugin v1.2
A production-ready WordPress plugin for frontend story submissions with a full user account system, an independent user dashboard, and an admin review workflow.
What's New in v1.2
| Feature | Details |
|---|---|
| User Registration & Login | Frontend auth panel — register, login, logout with no WP dashboard access |
| Account Approval Workflow | All new accounts start as "Pending". Admin approves/rejects from Users list |
| User Dashboard | Separate frontend page via [sss_user_dashboard] shortcode |
| My Stories panel | Users see all their submissions with status — Pending, Published, Not Published |
| Story submit gate | Only approved accounts can reach the submission form |
| Story status emails | User notified by email when their story is published or rejected |
| Account approval emails | User notified when admin approves their account |
| Admin user column | "Story Account" column in WP Users list with one-click Approve / Reject |
| User link in submissions | Admin submission list shows linked WP user + account status badge |
Full Feature List
Frontend
- 4-step submission form with animated progress bar (
[story_submission_form]) - User dashboard independent of WordPress admin (
[sss_user_dashboard]) - Registration form — First name, last name, email, phone, password + strength meter
- Login form — Email + password, remember me, forgot password link
- Auth gate — Unapproved or logged-out users see a clear message instead of the form
- AJAX throughout — no page reloads for login, register, logout, or story fetch
- Drag-and-drop file uploads (JPG, PNG, MP4; max 50 MB each)
- Responsive design — sidebar collapses on mobile
Dashboard Panels
| Panel | What it shows |
|---|---|
| Overview | Account status notice, stats (Total / Pending / Published / Not Published), recent 5 stories |
| My Stories | Full filterable table of all submissions with status pills |
| Submit Story | Embeds the full 4-step submission form (approved accounts only) |
| My Account | View profile info + update name / phone |
Admin
- Story Submissions CPT with custom columns — Submitter (with user link + status badge), Category, Files, Submitted date, Status
- Approve / Reject quick actions in list table and meta boxes
- Account Approval column in WP Admin → Users with Approve / Reject one-click links
- Admin notices after every action
Email Notifications
| Trigger | Recipient |
|---|---|
| New story submission | Site admin |
| New user registration | Site admin |
| Account approved | User |
| Story published (approved) | User |
| Story rejected | User |
File Structure
story-submission-system/
├── story-submission-system.php ← Main plugin file (v1.2)
├── includes/
│ ├── class-sss-post-type.php ← CPT + meta boxes + story status emails
│ ├── class-sss-shortcode.php ← [story_submission_form] + auth gate
│ ├── class-sss-grid-shortcode.php ← [story_grid] public display
│ ├── class-sss-ajax.php ← AJAX submit handler + auth check
│ ├── class-sss-admin.php ← Admin columns, row actions, user link
│ ├── class-sss-email.php ← HTML email helper
│ ├── class-sss-auth.php ← NEW: Register / Login / Logout + account approval
│ └── class-sss-dashboard.php ← NEW: [sss_user_dashboard] shortcode + AJAX
├── templates/
│ └── single-sss_submission.php ← Single story front-end template
└── assets/
├── css/
│ ├── form.css ← Multi-step form styles
│ ├── grid.css ← Story grid styles
│ ├── dashboard.css ← NEW: Auth panel + dashboard layout
│ └── admin.css ← Admin list table styles
└── js/
├── form.js ← Multi-step logic + AJAX submit
├── grid.js ← Story grid AJAX
└── dashboard.js ← NEW: Login/register/logout + dashboard JS
Installation
- Upload the
story-submission-systemfolder to/wp-content/plugins/ - In WordPress Admin → Plugins, activate Story Submission System
- Go to Settings → Permalinks and click Save Changes once (registers CPT slug)
Setup Checklist
Step 1 — Create the Dashboard Page
- Pages → Add New
- Title it anything (e.g. "My Dashboard" or "Story Portal")
- Add the shortcode:
[sss_user_dashboard] - Publish the page
- This is your only page users need — login, register, submit, track — all here
Step 2 — (Optional) Dedicated Submission Form Page
If you want a standalone form page as well:
- Pages → Add New, add
[story_submission_form] - The form will only render for approved logged-in users; others see a notice
Step 3 — Approving Users
- Go to WP Admin → Users
- Find the new registrant — look for the "Story Account" column
- Click Approve — user gets an email notification instantly
- User can now log in and submit stories
Step 4 — Reviewing Stories
- Go to WP Admin → Story Submissions
- Click Approve to publish (user gets an email) or Reject to trash (user gets an email)
Shortcodes
| Shortcode | Description |
|---|---|
[sss_user_dashboard] |
Full user portal — login, register, dashboard, submit form |
[story_submission_form] |
Standalone 4-step submission form (auth-gated) |
[story_grid] |
Public grid of published stories |
User Account Flow
User visits Dashboard page
│
├─ Not logged in → Shows Login / Register tabs
│ │
│ ├─ Register → Account created (status: Pending)
│ │ Admin notified by email
│ │ Admin approves from Users list
│ │ User notified by email ← Account Approved
│ │
│ └─ Login → Checks approval status
│
├─ Logged in, Pending → Dashboard shows "Awaiting Approval" notice
│
├─ Logged in, Rejected → Dashboard shows "Not Approved" notice
│
└─ Logged in, Approved → Full dashboard
├─ Overview (stats + recent stories)
├─ My Stories (full table with filters)
├─ Submit Story (4-step form)
└─ My Account (profile update)
Story Status Flow
User submits story
│
└─ Status: Pending (visible in user dashboard)
│
├─ Admin Approves → Status: Published
│ User receives "Story Live" email
│
└─ Admin Rejects → Status: Not Published
User receives "Not Published" email
Developer Filters & Hooks
// Change admin notification recipient for new story submissions
add_filter( 'sss_notification_recipient', function( $email, $post_id ) {
return 'editor@example.com';
}, 10, 2 );
// Run custom logic after a user account is approved
add_action( 'update_user_meta', function( $meta_id, $user_id, $meta_key, $meta_value ) {
if ( '_sss_account_status' === $meta_key && 'approved' === $meta_value ) {
// Your code here
}
}, 10, 4 );
// Run custom logic after a story is submitted
add_action( 'wp_insert_post', function( $post_id, $post ) {
if ( 'sss_submission' === $post->post_type && 'pending' === $post->post_status ) {
// Your code here
}
}, 10, 2 );
Security
- Nonces on every AJAX request (submission, login, register, logout, profile update)
- Capability checks on all admin approve/reject/user actions
- All text inputs sanitised —
sanitize_text_field(),wp_kses_post(),sanitize_email() - Passwords handled via
wp_signon()— never stored or logged in plain text - File uploads validated via
wp_check_filetype()against an allowlist defined('ABSPATH') || exitin every file
Meta Keys Reference
User Meta
| Key | Values | Description |
|---|---|---|
_sss_account_status |
pending / approved / rejected |
Account approval status |
_sss_phone |
string | Phone number from registration |
Post Meta (sss_submission)
| Key | Description |
|---|---|
_sss_submitter_name |
Name at time of submission |
_sss_submitter_email |
Email at time of submission |
_sss_submitted_at |
MySQL datetime of submission |
_sss_category_name |
Category name at time of submission |
_sss_attachment_ids |
Array of attachment IDs |
_sss_user_id |
WP user ID of the submitter |
Requirements
- WordPress 5.9+
- PHP 7.4+
- At least one category created (for the submission form dropdown)
Changelog
v1.2.0
- Added
class-sss-auth.php— frontend registration, login, logout, account approval - Added
class-sss-dashboard.php—[sss_user_dashboard]shortcode with full panel UI - Added
assets/css/dashboard.cssandassets/js/dashboard.js class-sss-ajax.php— auth gate added; submissions now linked to WP userclass-sss-shortcode.php— auth gate added to[story_submission_form]class-sss-post-type.php— story approved/rejected emails to submitterclass-sss-admin.php— user profile link + account status badge in Submitter column
v1.1.0
- Multi-step form with progress bar
- AJAX submission + drag-and-drop file uploads
- Admin approve/reject quick actions
- HTML admin email notifications
License
GPL-2.0+