Developed by Omar Jabar
Welcome to the comprehensive documentation for QuickOrder. This guide will help you install, configure, and customize the plugin to create beautiful order forms for your WooCommerce products.
QuickOrder is a powerful WordPress plugin that allows you to create custom order forms for your WooCommerce products. With this plugin, you can:
This documentation will guide you through all aspects of using the plugin, from installation to advanced customization.
Follow these steps to install and activate the QuickOrder plugin:
Before installing, make sure you have:
quick-order
folder to the
/wp-content/plugins/
directory
After activation, you should see a new menu item called Order Form in your WordPress admin sidebar. This indicates that the plugin has been successfully installed and activated.
QuickOrder is a premium WordPress plugin that requires a license for full functionality. Please note the following important information:
When you install the plugin, you will need to purchase a license to unlock all features. The license can be purchased directly from our website or through the plugin's settings page.
We offer a 15-day money-back guarantee on all purchases. If you're not satisfied with the plugin for any reason, you can request a full refund within 15 days of your purchase.
To request a refund:
We process all refund requests within 3 business days. Please note that after the 15-day period, refunds cannot be issued.
To configure the plugin, navigate to Order Form > Settings in your WordPress admin sidebar. The settings page is divided into several tabs for easy navigation.
The plugin now includes improved price and currency handling with the following features:
These settings can be found in the Order Summary section of the settings page, providing granular control over how prices and shipping costs are displayed to customers.
You can choose where the order form appears on your product pages:
You can customize the title and subtitle that appear above the order form:
The Fields tab allows you to customize the fields that appear in your order form. You can add, edit, or remove fields as needed.
By default, the form includes the following fields:
To add a custom field:
You can change the order of fields by dragging and dropping them in the fields list. Simply click and hold on a field, then drag it to the desired position.
To edit a field, click the Edit button next to the field in the list. To delete a field, click the Delete button.
The Styling tab allows you to customize the appearance of your order form to match your website's design.
You can set the width of the form as a percentage of the container width. The default is 100% (full width).
Customize the following colors to match your brand:
Customize the typography settings:
The plugin includes an option to hide the default WooCommerce Add to Cart button when your custom order form is displayed. This is useful when you want your order form to be the only way for customers to place orders.
To hide the Add to Cart button:
When this option is enabled, the plugin:
This creates a clean interface where customers can only use your custom order form to place orders.
To protect your forms from spam submissions, the plugin includes integration with Google reCAPTCHA.
The plugin provides a shortcode that allows you to place the order form anywhere on your site, not just on product pages.
To display the order form, use the following shortcode:
[wcpof_order_form]
To display the order form for a specific product, use the following shortcode with the product ID:
[wcpof_order_form product_id="123"]
Replace 123
with the actual product ID.
You can use the shortcode in:
QuickOrder allows you to automatically send form submissions to Google Sheets, making it easy to track and analyze your orders in a spreadsheet format. This integration is perfect for businesses that want to maintain order records outside of WordPress or need to share order data with team members.
Follow these steps to set up the Google Sheets integration:
Copy and paste the following code into your Google Apps Script editor:
/**
* Google Apps Script for WC Product Order Form
*
* This script receives order data from your WordPress site and adds it to a Google Sheet.
*
* SETUP INSTRUCTIONS:
* 1. Create a new Google Sheet
* 2. Go to Extensions > Apps Script
* 3. Replace the default code with this script
* 4. Save the project with a name like "WC Product Order Form"
* 5. Deploy as a web app:
* - Click "Deploy" > "New deployment"
* - Select type: "Web app"
* - Set "Execute as" to "Me"
* - Set "Who has access" to "Anyone"
* - Click "Deploy"
* 6. Copy the web app URL and paste it in your plugin settings
*/
// The doPost function is called when data is sent to the web app
function doPost(e) {
try {
// Parse the JSON data sent from WordPress
const data = JSON.parse(e.postData.contents);
// Get the active spreadsheet and the first sheet
const ss = SpreadsheetApp.getActiveSpreadsheet();
const sheet = ss.getSheets()[0];
// Check if headers exist, if not create them
// Also check if we need to create headers even if they exist (for new fields)
const forceCreateHeaders = e.parameter && e.parameter['X-Create-Headers'] === 'true' ||
(e.headers && e.headers['X-Create-Headers'] === 'true');
if (sheet.getLastRow() === 0 || forceCreateHeaders) {
createHeaders(sheet, data);
}
// Get headers to ensure we're adding data in the right columns
const headers = sheet.getRange(1, 1, 1, sheet.getLastColumn()).getValues()[0];
// Prepare the row data based on headers
const rowData = headers.map(header => {
// Special handling for phone numbers to ensure they're treated as text
if (header === 'customer_phone' || header.includes('phone')) {
if (!data[header]) return '';
// If the value has our special PHONE: prefix, remove it before display
if (data[header].startsWith("'")) {
// Remove the prefix but keep it as text by adding a single quote
return data[header];
}
// For any other phone number, ensure it's treated as text
return "'" + data[header];
}
// Return the value from data or empty string if not found
return data[header] !== undefined ? data[header] : '';
});
// Add the new row to the sheet
sheet.appendRow(rowData);
// Return success response
return ContentService.createTextOutput(JSON.stringify({
'success': true,
'message': 'Data saved successfully'
})).setMimeType(ContentService.MimeType.JSON);
} catch (error) {
// Log the error
console.error('Error processing data: ' + error.message);
// Return error response
return ContentService.createTextOutput(JSON.stringify({
'success': false,
'error': error.message
})).setMimeType(ContentService.MimeType.JSON);
}
}
// Create headers based on the data received
function createHeaders(sheet, data) {
// Get existing headers if any
let existingHeaders = [];
if (sheet.getLastRow() > 0) {
existingHeaders = sheet.getRange(1, 1, 1, sheet.getLastColumn()).getValues()[0];
}
// Get all keys from the data
const dataKeys = Object.keys(data);
// Combine existing headers with new keys from data
let allHeaders = existingHeaders.slice();
// Add any new headers that don't already exist
dataKeys.forEach(key => {
if (!allHeaders.includes(key)) {
allHeaders.push(key);
}
});
// If we have headers, clear the first row and set the new headers
if (allHeaders.length > 0) {
// If there are existing headers, clear them first
if (existingHeaders.length > 0) {
sheet.getRange(1, 1, 1, existingHeaders.length).clearContent();
}
// Set the new headers
sheet.getRange(1, 1, 1, allHeaders.length).setValues([allHeaders]);
// Freeze the header row and make it bold
sheet.setFrozenRows(1);
sheet.getRange(1, 1, 1, allHeaders.length).setFontWeight('bold');
}
}
// Test function to verify the script is working
function testScript() {
const testData = {
order_id: '12345',
order_date: '2023-01-01 12:00:00',
product_id: '789',
product_name: 'Test Product',
order_status: 'processing',
quantity: 2,
total: 99.99,
customer_name: 'John Doe',
customer_email: 'john@example.com',
customer_phone: "'0123456789", // Note the leading single quote to preserve leading zeros
field_address: '123 Main St',
field_notes: 'Test notes'
};
// Simulate a POST request
const e = {
postData: {
contents: JSON.stringify(testData)
},
parameter: {
'X-Create-Headers': 'true'
}
};
// Call doPost with the test data
const result = doPost(e);
// Log the result
Logger.log(result.getContent());
}
The integration works as follows:
The following data is sent to Google Sheets:
The script includes a testScript()
function that you can run to verify that
everything is working correctly:
testScript
functionIf the test is successful, your integration is working properly and ready to receive real order data.
If you encounter issues with the Google Sheets integration, check the following:
If you encounter issues with the plugin, try these troubleshooting steps:
!important
to your custom CSS rulesYes, the plugin is designed to work with any WordPress theme that supports WooCommerce. The plugin includes options to customize the appearance to match your theme's design.
Yes, you can add, edit, and remove fields from the form using the Fields tab in the plugin settings. You can create various field types including text, email, number, textarea, checkbox, radio, and select.
Yes, all form data submitted by customers is saved with the order and can be viewed in the order details in your WooCommerce admin.
Yes, the plugin is translation-ready. You can use tools like Loco Translate or WPML to translate the plugin strings to your language.
Yes, the plugin works with all WooCommerce product types, including simple, variable, grouped, and external products.
Yes, the plugin includes extensive styling options in the Styling tab. You can customize colors, typography, spacing, and more. You can also add custom CSS for more advanced customization.