WP Manifestindependent plugin directory
manifest / events / amelia-wordpress-booking-pause-resume

Amelia Pause & Resume Packages

This plugin allows users to pause their Amelia packages for 15 days, blocks bookings during pause, and extends package end dates when resumed. Second-time pauses require purchasing a "Hold My Plan" product.

★ 0stars

Install

Download source zip No release zip yet

This is the repository archive. It installs, but the folder name will carry the branch suffix and updates will not flow.

Install straight from GitHub with WP-CLI:

wp plugin install https://github.com/wajihshaikh/amelia-wordpress-booking-pause-resume/archive/refs/heads/main.zip
No built-in updater. New versions won't appear under Dashboard → Updates. Install new releases yourself, or let Git Updater track the repository.

Amelia Pause Resume Plugin - Complete Flow Documentation

🔄 Plugin Overview

This plugin allows users to pause their Amelia packages for 15 days, blocks bookings during pause, and extends package end dates when resumed. Second-time pauses require purchasing a "Hold My Plan" product.


📋 Main Components

1. Database Tables Used

  • wp_amelia_packages_to_customers - Customer package relationships
  • wp_amelia_users - Amelia user data
  • wp_amelia_packages - Package definitions
  • wp_usermeta - WordPress user metadata for tracking pauses

2. User Meta Keys

  • amelia_paused_until_{package_id} - Pause end date
  • amelia_pause_start_{package_id} - Pause start date
  • amelia_pause_count_{package_id} - Number of times package paused

🚀 Complete User Flow

Step 1: Initial Setup

User logs in → Plugin checks WordPress user ID → 
Finds corresponding Amelia customer ID → 
Retrieves all user packages from database

Step 2: Package Display

For each package:
├── Check if expired (end date < now)
├── Check if paused (status = 'paused' OR paused_until > now)
├── Display appropriate controls based on status
└── Show package information (name, end date, status)

🎯 FIRST TIME PAUSE FLOW

User Action: Clicks "Pause for 15 Days"

Frontend (JavaScript)

1. User clicks pause button
2. Show "Pausing..." message
3. Send AJAX request to 'amelia_pause_package'
4. Wait for response

Backend (PHP)

1. Verify user is logged in
2. Get package_id from request
3. Check pause count for this package
   └── pause_count = 0 (first time) → PROCEED
4. Get Amelia customer ID from WordPress user ID
5. Verify package exists and belongs to user
6. Calculate dates:
   ├── pause_start = current timestamp  
   └── paused_until = current timestamp + 15 days
7. Update user meta:
   ├── amelia_paused_until_{package_id} = paused_until
   ├── amelia_pause_start_{package_id} = pause_start
   └── amelia_pause_count_{package_id} = 1
8. Update database: package status = 'paused'
9. Return success message

Frontend Response

1. Show success message
2. Reload page after 1.5 seconds
3. Package now shows "Paused" status

⏸️ PAUSE PERIOD (15 Days)

Booking Attempt During Pause

1. User tries to book appointment
2. Plugin intercepts booking request (block_if_paused)
3. Check all user meta for paused_until_* keys
4. If any package paused and paused_until > now:
   └── Block booking with error message
5. If paused_until <= now:
   └── Auto-cleanup expired pause meta

Package Status Display

Display: "Paused until [date]"
└── If 15 days passed: Show "Resume Package" button
└── If still paused: Show remaining days countdown

▶️ RESUME FLOW

User Action: Clicks "Resume Package"

Backend Process

1. Verify user is logged in
2. Get package_id from request  
3. Verify 15 days have passed since pause_start
   └── If not: Return error "Cannot resume before 15 days"
4. Get original package end date
5. Calculate new end date = original_end + 15 days
6. Clean up user meta:
   ├── Delete amelia_paused_until_{package_id}
   └── Delete amelia_pause_start_{package_id}
7. Update database:
   ├── status = 'approved'
   └── end = new_end_date
8. Return success message

Result

✅ Package is active again
✅ Package end date extended by 15 days
✅ User can book appointments again
✅ Pause count remains (for future pause attempts)

🔒 SECOND TIME PAUSE FLOW

User Action: Clicks "Pause for 15 Days" (Again)

Enhanced Backend Check

1. Verify user is logged in
2. Get package_id from request
3. Check pause count for this package
   └── pause_count >= 1 (second+ time) → CHECK PURCHASE
4. Get user email and WordPress user ID
5. Check WooCommerce purchase:
   └── wc_customer_bought_product(email, user_id, 10591)
6. If NOT purchased:
   └── Return error with purchase link
7. If purchased:
   └── Continue with normal pause process (same as first time)
8. Increment pause count + 1

Purchase Check Error Response

Display: "To pause again, please purchase [Hold My Plan Link] first."
└── Link opens: https://cchamppionsss.online/product/hold-my-plan/

If Purchase Verified

Same process as first pause:
├── Set pause dates (15 days)  
├── Update user meta
├── Set package status = 'paused'
└── Increment pause_count

🛡️ Security & Validation

Access Control

  • ✅ User must be logged in
  • ✅ Package must belong to current user
  • ✅ All inputs sanitized and validated
  • ✅ SQL prepared statements used

Business Logic Validation

  • ✅ Cannot pause expired packages
  • ✅ Cannot resume before 15 days
  • ✅ Purchase required for second+ pauses
  • ✅ Booking blocked during active pause

📊 Data Flow Summary

graph TD
    A[User Logs In] --> B[Load Packages]
    B --> C{Package Status?}
    C -->|Active| D[Show Pause Button]
    C -->|Paused| E[Show Resume/Countdown]  
    C -->|Expired| F[Show Expired Status]

    D --> G{First Pause?}
    G -->|Yes| H[Allow Pause - Free]
    G -->|No| I{Has Purchase?}
    I -->|Yes| H
    I -->|No| J[Show Purchase Error]

    H --> K[Set 15 Day Pause]
    K --> L[Block Bookings]
    L --> M[Wait 15 Days]
    M --> N[Allow Resume]
    N --> O[Extend Package +15 Days]

🔧 Technical Implementation

WordPress Hooks Used

  • wp_enqueue_scripts - Load JavaScript
  • wp_ajax_* - Handle AJAX requests
  • wp_ajax_nopriv_* - Handle non-logged-in requests

Shortcode Usage

[amelia_pause_controls] // Show all packages
[amelia_pause_controls package_id="123"] // Specific package
[amelia_pause_controls debug="true"] // Debug mode

Database Operations

  • SELECT: Get user packages and details
  • UPDATE: Change package status and end dates
  • INSERT/UPDATE: WordPress user meta for tracking

🎨 Frontend Features

Visual Design

  • Gradient card design with glassmorphism effect
  • Hover animations and transitions
  • Color-coded status indicators
  • Responsive layout

User Experience

  • Real-time status updates
  • Loading states during operations
  • Clear error messages with actionable links
  • Auto-refresh after successful operations

📈 Business Logic

Monetization Strategy

  1. First pause: Free (customer acquisition)
  2. Additional pauses: Paid via "Hold My Plan" product
  3. Value proposition: Flexibility + package extension

Customer Benefits

  • ✅ Pause when needed (travel, illness, etc.)
  • ✅ No loss of remaining sessions