Manual Order Creation

Manual Order Creation

Create orders manually through the WordPress admin panel for phone orders, offline sales, system migrations, or special customer requests.

Overview

The manual order creation tool lets administrators create service orders outside the normal checkout flow. This is useful for processing phone orders, importing legacy data, handling offline payments, or accommodating special customer situations.

Page Location: WordPress Admin → WP Sell Services → Orders → Create Order

Access Required: manage_options capability (administrators only)

When to Use Manual Orders

Create manual orders for:

  • Phone Orders: Customer places order over the phone
  • Offline Payments: Payment received via bank transfer, cash, or check
  • Data Migration: Importing orders from another system
  • Special Arrangements: Custom pricing or package arrangements
  • Testing: Creating test orders for development

Manual orders function identically to regular orders once created.

Accessing the Create Order Page

  1. Go to WP Sell Services → Orders in WordPress admin
  2. Click Create Order button
  3. Manual order form opens (page slug: wpss-create-order)

Note: This is a hidden submenu page – not visible in the WordPress admin menu. Only accessible via the Create Order button.

Creating a Manual Order

Step 1: Select Service and Package

Service Selection:

  • Choose from all published services
  • Dropdown shows: Service Title (Vendor Name) – Starting Price
  • Service must have publish post status

Package Selection:

  • After selecting service, available packages load
  • Packages auto-fill:
  • Leave empty to use service starting price

Step 2: Select Addons

Loading Addons:

Addons load automatically when you select a service via AJAX action: wpssgetservice_addons

Addon Information Shown:

  • Title and description
  • Price and price type
  • Min/max quantity
  • Delivery days added
  • Required status

Addon Selection:

  • Check addon to include
  • Set quantity (for quantity-based addons)
  • Price calculates automatically

Step 3: Select Customer and Vendor

Customer (Buyer):

  • Required field
  • Select from all WordPress users
  • Shows display name and email

Vendor Override:

  • Optional field
  • Defaults to service author if left empty
  • Useful for reassigning orders to different vendors
  • Cannot be same as customer

Step 4: Configure Pricing

Pricing Summary Table:

  • Subtotal: Package base price
  • Addons Total: Sum of selected addon prices
  • Order Total: Subtotal + Addons Total (or manual override)
  • Commission Rate: Platform fee percentage (default from global settings)
  • Platform Fee: Calculated from total × commission rate
  • Vendor Earnings: Total – Platform Fee

Manual Total Override:

  • Check “Override total manually” to set custom total
  • Input field enables when checked
  • Useful for discounts or custom pricing

Commission Rate:

  • Defaults to global commission rate from CommissionService::getglobalcommission_rate()
  • Can be adjusted per-order (0-100%)
  • Affects platform fee and vendor earnings calculations

Currency:

  • Select from 25 supported currencies
  • Defaults to global currency from wpssgetcurrency()
  • Includes: USD, EUR, GBP, INR, AUD, CAD, JPY, and 18 more

Step 5: Set Status and Payment Details

Order Status:

Available initial statuses:

StatusDescription
pending_paymentPayment not yet received
pending_requirementsPayment complete, awaiting buyer requirements
in_progressSkip requirements, vendor starts immediately
deliveredCreate order with delivery already submitted
completedCreate already-completed order

Smart Status Logic:

If you select pendingrequirements but the service has no requirements defined, the order automatically transitions to inprogress status. You’ll see a notification: “Note: This service has no requirements defined. Order was set to ‘In Progress’ automatically.”

Payment Status:

StatusDescription
pendingPayment not received
paidPayment received (default)
failedPayment failed
refundedPayment refunded

Payment Method:

MethodUse For
manualDefault for admin-created orders
bank_transferBank transfer payments
cashCash payments
otherOther payment methods

Transaction ID:

  • Optional reference number
  • Enter external payment reference (e.g., bank transaction ID)
  • Stored in transaction_id field

Delivery Days:

  • Number of days until delivery deadline
  • Auto-fills from selected package
  • Can be manually adjusted
  • Used to calculate deliverydeadline if order status is inprogress

Revisions Included:

  • Number of revisions buyer can request
  • Auto-fills from selected package
  • Can be manually adjusted
  • Default: 2 revisions

Step 6: Add Admin Notes

Internal Notes:

  • Textarea for internal notes about the order
  • Not visible to customer or vendor
  • Stored as system message in order conversation
  • Format: [Admin Note] Your note text here
  • Uses ConversationService::addsystemmessage()

Example Notes:

  • “Phone order from customer on 2024-01-15”
  • “Migrated from old system – Order #OLD-123”
  • “Custom pricing approved by manager”
  • “Special rush delivery requested”

Order Creation Process

When you click Create Order, the following happens:

1. Data Validation

  • Service ID and Customer ID required
  • Service must exist and be type wpss_service
  • Customer cannot be same as vendor
  • Amount must be greater than zero (minimum $10.00 fallback)

2. Addon Processing

  • Selected addons validated via ServiceAddonService::get()
  • Addon prices calculated using ServiceAddonService::calculate_price()
  • Addon delivery days added to total delivery time

3. Commission Calculation

  • Commission rate validated (0-100%)
  • Platform fee = Total × (Commission Rate / 100)
  • Vendor earnings = Total – Platform Fee

4. Deadline Calculation

  • If status is inprogress and deliverydays > 0:
  • Otherwise, deadline fields remain null

5. Order Number Generation

  • Format: WPSS- + 8 random uppercase characters
  • Example: WPSS-A7K9M2X4
  • Generated using wpgeneratepassword(8, false)

6. Database Insert

Order record inserted into wpss_orders table with fields:

array(
    'order_number'       => 'WPSS-A7K9M2X4',
    'customer_id'        => (int),
    'vendor_id'          => (int),
    'service_id'         => (int),
    'package_id'         => (int|null),
    'platform'           => 'manual',
    'platform_order_id'  => null,
    'transaction_id'     => (string|null),
    'addons'             => JSON,
    'subtotal'           => (float),
    'addons_total'       => (float),
    'total'              => (float),
    'currency'           => (string),
    'status'             => (string),
    'payment_method'     => (string),
    'payment_status'     => (string),
    'commission_rate'    => (float),
    'platform_fee'       => (float),
    'vendor_earnings'    => (float),
    'revisions_included' => (int),
    'revisions_used'     => 0,
    'delivery_deadline'  => (datetime|null),
    'original_deadline'  => (datetime|null),
    'started_at'         => (datetime|null),
    'paid_at'            => (datetime|null),
    'completed_at'       => (datetime|null),
    'created_at'         => (datetime),
    'updated_at'         => (datetime),
)

7. Conversation Creation

  • Order conversation created via ConversationService::createfororder()
  • Admin notes added as system message if provided

8. WordPress Hooks Fired

do_action( 'wpss_order_created', $order_id, $status );
do_action( 'wpss_order_status_changed', $order_id, $status, '' );
do_action( "wpss_order_status_{$status}", $order_id, '' );

9. Success Response

Returns JSON with:

  • order_id – Database ID of created order
  • order_number – Generated order number
  • status – Order status
  • viewurl – URL to view order (via wpssgetorderurl())
  • requirements_url – URL to requirements form
  • requirements_skipped – Boolean if requirements auto-skipped
  • has_requirements – Boolean if service has requirements

After Order Creation

Success Screen Shows:

  • Order created confirmation message
  • Order number and ID
  • View Order button – Opens order detail page
  • Submit Requirements button – Shows if service has requirements and status is pending_requirements
  • Create Another Order button – Resets form

Next Steps:

  1. If status is pending_requirements:
  2. If status is in_progress:
  3. If status is delivered or completed:

Manual Order Fields Reference

Required Fields

  • Service
  • Customer (Buyer)

Auto-Calculated Fields

  • Order Number (generated)
  • Subtotal (from package or service)
  • Platform Fee (from commission rate)
  • Vendor Earnings (total – platform fee)
  • Delivery Deadline (from delivery days if in_progress)

Optional Override Fields

  • Vendor (defaults to service author)
  • Total (calculated unless manually overridden)
  • Commission Rate (defaults to global rate)
  • Currency (defaults to global currency)
  • Payment Method (defaults to ‘manual’)
  • Transaction ID
  • Delivery Days (defaults from package)
  • Revisions (defaults from package)
  • Admin Notes

Common Use Cases

Phone Order

  1. Customer calls with order request
  2. Admin creates manual order
  3. Status: pending_payment or paid depending on payment
  4. Payment Method: Bank transfer or other
  5. Add admin note: “Phone order from [customer name] on [date]”

Offline Payment

  1. Payment received outside platform (bank transfer, cash)
  2. Create order with status: paid
  3. Payment Status: paid
  4. Transaction ID: Bank reference number
  5. Admin note: Payment method details

Data Migration

  1. Import orders from old system
  2. Create multiple manual orders
  3. Status: completed for historical orders
  4. Admin notes: “Migrated from [old system] – Original order ID: [old_id]”

Custom Pricing

  1. Negotiate special price with customer
  2. Create order with package
  3. Enable “Override total manually”
  4. Set custom total
  5. Adjust commission rate if needed
  6. Admin note: “Custom pricing approved by [manager name]”

Limitations

  • Cannot bulk create orders (one at a time)
  • No draft/save functionality (must complete creation)
  • Cannot edit orders after creation (use order edit page)
  • No customer notification sent automatically (manual orders are platform=’manual’)

Technical Details

AJAX Actions:

  • wpsscreatemanual_order – Creates the order
  • wpssgetservice_addons – Loads addons for selected service

JavaScript Object:

wpssManualOrder localized with:

  • ajaxUrl – AJAX endpoint
  • nonce – Security nonce
  • defaultCommissionRate – Global commission rate
  • currencyFormat – Currency display format
  • i18n – Translated strings

Nonce Action:

  • Action: wpsscreatemanual_order
  • Verified with checkajaxreferer()

Database Tables:

  • wpss_orders – Order record
  • wpss_conversations – Order conversation

Minimum Order Total:

If calculated total is 0 or negative, falls back to $10.00 minimum.

Next Steps

Last updated: February 14, 2026