README.md 8.6 KB

QDR — Studiou WC Order Print Statuses

WordPress plugin that extends WooCommerce with a dedicated workflow for managing print orders sent to third-party print providers. It adds custom order statuses, tracking fields, CSV export, protocol-based CSV imports, and search/filter capabilities tailored to a print fulfillment pipeline.

  • Plugin slug / text domain: studiou-wc-ord-print-statuses
  • Current version: 1.3.2
  • Author: Dalibor Votruba — quadarax.com
  • License: GPL v2 or later

Requirements

Component Minimum Tested up to
WordPress 5.8 6.8.3
WooCommerce 3.0 10.2.2
PHP 7.2

Compatible with WooCommerce High-Performance Order Storage (HPOS) — the plugin declares custom_order_tables compatibility and queries the HPOS wc_orders table directly.


Installation

  1. Copy the studiou-wc-ord-print-statuses folder into wp-content/plugins/.
  2. Make sure WooCommerce is installed and active.
  3. Activate the plugin from Plugins in the WordPress admin.

No additional setup is required — custom statuses, fields, columns, and bulk actions are registered on activation.


Features

1. Custom order statuses

Two new statuses are inserted in the WooCommerce status pipeline, right after processing:

Slug Label Purpose
wc-to-print Prepare to Printing Order is queued and exported to the print shop.
wc-in-print In Printing Print shop has accepted the order.

Status transitions automatically stamp the related metadata field (to_print_date / in_print_date) with the current server time.

2. Print Information fields on the order edit page

A new Print Information panel is added to the order details screen with four editable fields:

  • Prepare To Print Date (to_print_date)
  • In Print Date (in_print_date)
  • External Order Number (external_ref_ord_no)
  • External Order Delivered (external_ref_ord_delivered)

An additional internal field external_ref_ord_date is populated during InPrint protocol imports.

3. Bulk actions on the Orders list

Available in the Bulk actions dropdown on WooCommerce → Orders:

  • Prepare to Printing Export — runs the print-shop export SQL across the selected orders, streams the result as a CSV download, and moves every selected order to wc-to-print.
  • Set Status to Prepare to Printing — moves selected orders to wc-to-print and stamps to_print_date.
  • Set Status to In Printing — moves selected orders to wc-in-print and stamps in_print_date.

4. Extra columns in the Orders list

Three columns are appended after Total:

  • To Print Date
  • In Print Date
  • External Order Number

5. Search by External Order Number

The Orders list gains a search input that filters orders on the external_ref_ord_no meta value (LIKE match).

6. Protocol imports

A WooCommerce → Import Protocols submenu exposes two CSV upload forms:

  • Import InPrint Protocol — for every row in the file, the matching order is set to wc-in-print and the external reference number / date are saved.
  • Import Delivered Protocol — for every row in the file, the matching order is set to wc-completed and the delivery timestamp is recorded.

Both importers require the manage_woocommerce capability and are protected by WordPress nonces.


CSV formats

Export — Prepare to Printing

Generated file: prepare_to_printing_export.csv

Columns (in order):

order_no, prod_cat, prod_name, prod_var, prod_var_type, prod_img_url, qty, email

prod_var_type is sourced from the variation's attribute_pa_format postmeta, resolved against the wp_terms table.

Import — InPrint Protocol

Required headers (case-sensitive):

order_no, externalorder, externalorderdate

Effect per row: order → status wc-in-print, sets in_print_date (now), external_ref_ord_no, external_ref_ord_date.

Import — Delivered Protocol

Required header:

order_no

Effect per row: order → status wc-completed, sets external_ref_ord_delivered (now).


Architecture

The plugin follows a manager-based pattern. The main bootstrapper (studiou-wc-ord-print-statuses.php) wires up specialised classes, each owning one slice of behaviour:

Class File Responsibility
Order_Status_Manager includes/class-order-status-manager.php Register custom statuses, handle transitions.
Order_Fields_Manager includes/class-order-fields-manager.php Render and persist Print Information fields.
Bulk_Actions_Manager includes/class-bulk-actions-manager.php Register and dispatch bulk actions.
Custom_Columns_Manager includes/class-custom-columns-manager.php Inject extra columns into the Orders list.
Import_Manager includes/class-import-manager.php Admin UI + handlers for protocol CSV imports.
Order_Search_Manager includes/class-order-search-manager.php Extend order search to external reference no.
Studiou_DB_Manager includes/class-db-manager.php All SQL and protocol-processing logic.
UtilsLog includes/utils-log.php Lightweight logging helper (uses WP_DEBUG).

The export query in Studiou_DB_Manager::get_orders_for_printing() joins wc_orders, wc_order_product_lookup, posts (products + variations), postmeta (variation attribute + thumbnail), terms, term_taxonomy, and term_relationships to assemble the print-shop payload in a single round-trip.


Internationalization

  • Text domain: studiou-wc-ord-print-statuses
  • Translation files: languages/
  • Bundled locales: Czech (cs_CZ) — see docs/translations.txt for the EN→CS reference list.

Use the standard WordPress functions (__(), _e(), _x(), _n_noop()) for any new strings.


Logging

UtilsLog::log($message) writes to the WordPress error log when WP_DEBUG is enabled. With WP_DEBUG_LOG on, log output ends up in wp-content/debug.log. The plugin logs initialization, dependency loading, status changes, bulk actions, and SQL failures.


Project layout

studiou-wc-ord-print-statuses/
├── studiou-wc-ord-print-statuses.php   # Plugin bootstrap (header + main class)
├── includes/
│   ├── class-db-manager.php
│   ├── class-order-status-manager.php
│   ├── class-order-fields-manager.php
│   ├── class-order-search-manager.php
│   ├── class-bulk-actions-manager.php
│   ├── class-custom-columns-manager.php
│   ├── class-import-manager.php
│   └── utils-log.php
├── languages/                          # .po / .mo translation files
├── docs/                               # Project documentation (see below)
├── README.md                           # This file
└── CLAUDE.md                           # Guidance for Claude Code sessions

Documentation

Reference documents live under docs/:

Project-internal guidance for AI-assisted development is documented in CLAUDE.md.


Changelog

1.3.2 — 2025-10-18

  • Fixed: prod_var_type column was empty in prepare_to_printing_export.csv. Variation attribute is now resolved through postmeta.attribute_pa_format joined against wp_terms.name.
  • Fixed: HPOS incompatibility warning. Plugin now explicitly declares custom_order_tables compatibility.
  • Tested: WordPress 6.8.3, WooCommerce 10.2.2 with HPOS enabled.

1.3.1

  • Previous stable release.

Support

For bug reports, feature requests or commercial support, contact quadarax.com.


License

Released under the GNU General Public License v2.0 or later — see https://www.gnu.org/licenses/gpl-2.0.html.