Server Path Destination
Shipping destination — WP-CLI only. Verified by live test 2026-04-21.
Command
wp wkaie-export <subcommand> [<job_id>] [--output=<file>] [--format=<format>] [--limit=<n>] [--status=<s>]
Subcommands: run · products · orders.
# Export all products to an absolute path
wp wkaie-export products --output=/var/www/exports/products.csv --format=csv
# Export completed orders
wp wkaie-export orders --status=completed --output=/var/www/exports/orders.csv
# Run a saved export job by ID
wp wkaie-export run 42
Subcommand selects the entity. No --entity=<slug> flag.
Live Test (10031 products, CSV)
$ wp wkaie-export products --output=/tmp/wkaie-out/cli-products.csv --format=csv
Exporting product...
Success: Wkaie export bridge: exported 10031 record(s) to /tmp/wkaie-out/cli-products.csv.
Success: Export written to /tmp/wkaie-out/cli-products.csv.
$ ls -la /tmp/wkaie-out/cli-products.csv
-rw-r--r-- 1 www-data www-data 7341852 Apr 21 11:37 cli-products.csv
--output= absent → file stays in wp-content/uploads/wkaie-exports/; absolute path printed via WP_CLI::success().
Move Logic
Wkaie_Export_Bridge::move_to_destination():
rename($source, $dest)— atomic if same filesystem.- On failure:
copy($source, $dest)+wp_delete_file($source)— cross-filesystem fallback. wp_mkdir_p(dirname($dest))runs first if target dir missing.
Permissions
- WP-CLI process (www-data) needs write on target directory.
- No path sandboxing in the bridge — treat
--output=as privileged input. Never expose to untrusted callers.
Use Cases
| Use case | Recipe |
|---|---|
| Cron to FTP-synced folder | wp wkaie-export products --output=/srv/ftp-sync/products.csv, cron on host |
| Cron → S3 via awscli | wp wkaie-export products --output=/tmp/p.csv && aws s3 cp /tmp/p.csv s3://bucket/ |
| Push to shared NFS drop | --output=/mnt/share/daily/products.csv |
Troubleshooting
| Problem | Check |
|---|---|
--output= path errors | Absolute path required; relative paths resolve against CWD, unpredictable under cron |
wp wkaie-export --entity=... says "unknown flag" | --entity= not a real flag. Use subcommand: products, orders, or run <id> |
| Cross-filesystem move slow | Expected — rename() fell back to copy + unlink. Put source and dest on same mount |
Permission denied on target | PHP user (www-data) lacks write on target dir. chown www-data <dir> or pick writable path |
