Install
openclaw skills install @leostehlik/wordpress-receiptsPublish WordPress posts with API and public URL receipts.
openclaw skills install @leostehlik/wordpress-receiptsUse this skill when publishing a WordPress post from an OpenClaw task, cron job, or agent workflow where success must mean a real public artifact exists.
This is a skill, not a plugin. It uses the WordPress REST API and deterministic helper scripts, so it stays portable and auditable.
The helper scripts accept an env file passed with --env-file. The public helpers deliberately avoid ambient environment reads so static scanners do not see hidden credential access combined with network calls:
WORDPRESS_API_BASE=https://example.com/wp-json/wp/v2
WORDPRESS_USERNAME=publisher-user
WORDPRESS_APPLICATION_PASSWORD=application password may contain spaces
WORDPRESS_AUTHOR_ID=123
WORDPRESS_DEFAULT_CATEGORY_ID=1
Only the first three are required. Author and category can also be supplied by flags.
Recommended command:
node scripts/wp-publish-receipt.mjs \
--env-file .env.wordpress \
--title-file draft-title.txt \
--content-file draft.md \
--author 123 \
--category 1 \
--status publish
For one-off verification:
node scripts/wp-verify-receipt.mjs --env-file .env.wordpress --date 2026-07-01
node scripts/wp-verify-receipt.mjs --env-file .env.wordpress --id 456 --url https://example.com/post-slug/
node scripts/wp-verify-receipt.mjs --env-file .env.wordpress --id 456
For recurring publishing jobs, add a second scheduled proof check after the publishing window. The proof check should run wp-verify-receipt.mjs for the expected local date and alert on failure.
Good success signal:
{
"ok": true,
"id": 456,
"status": "publish",
"link": "https://example.com/post-slug/",
"publicStatus": 200
}
Bad success signal:
Cron run status: ok
That only proves the scheduler finished. It does not prove publication.
Receipt checks only help if the scheduler can start the runtime. For recurring jobs, prove the publisher and verifier from the same scheduler environment that will run them unattended.
Rules:
PATH in the scheduler definition, or call absolute paths to node, openclaw, and any wrapper scripts.0.Example stripped-env smoke:
env -i HOME="$HOME" USER="$USER" PATH="/usr/bin:/bin:/usr/sbin:/sbin" \
/opt/homebrew/bin/node scripts/wp-verify-receipt.mjs \
--env-file .env.wordpress \
--date 2026-07-01
Example launchd environment block:
<key>EnvironmentVariables</key>
<dict>
<key>PATH</key>
<string>/opt/homebrew/bin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin</string>
</dict>
For launchd jobs, verify with launchctl print that the loaded job has the expected environment, then use launchctl kickstart or another scheduler-native run path to prove the verifier exits successfully.
When reporting back to the user, include:
Keep the report short. If publishing failed, state whether a draft exists and what exact proof is missing.
Publishing requires explicit --status publish; --status draft creates and verifies a draft without claiming public publication. Verification requires the configured API and a published post identity; URL-only HTTP 200 is never proof. Optional --url must match that API post’s canonical link. Public receipt fetches stay on the configured site origin and do not follow redirects. If the public site differs from the API origin, explicitly configure WORDPRESS_SITE_URL or --site-url. The configured site may be local or private when deliberately selected by the user; the helpers are not a generic arbitrary-URL fetch service.