Post date

This commit is contained in:
Dejvino 2026-07-30 18:19:38 +02:00
parent c283c47cef
commit ebc2de4190
3 changed files with 25 additions and 1 deletions

View File

@ -39,6 +39,7 @@ Copy the posting script to e.g. `/usr/local/bin/wordpress-post` so that you can
* `--file PATH` — use PATH as the post content instead of opening `$EDITOR`.
* `--publish` — shortcut for `STATUS=publish`, posts live immediately.
* `--edit POST_ID` — update an existing post instead of creating a new one.
* `--date DATE` — backdate the post to DATE, an ISO 8601 UTC timestamp (e.g. `2026-07-27T10:00:00Z`, matching a Gitea commit date) — sent as the post's `date_gmt`.
## Testing
`tests/run_tests.sh` runs post.sh against a local mock of the WordPress REST

13
post.sh
View File

@ -22,10 +22,14 @@ CONFIG_DIR="${WORDPRESS_REST_CURL_CONFIG_DIR:-$HOME/.config/wordpress-rest-curl}
# --edit POST_ID update an existing post instead of creating a new one
# --publish shortcut for STATUS=publish
# --file PATH use PATH as the post source instead of opening $EDITOR
# --date DATE backdate the post to DATE, an ISO 8601 UTC timestamp
# (e.g. 2026-07-27T10:00:00Z, matching a Gitea commit
# date) — sent as the post's date_gmt
SITE=""
POST_ID=""
SOURCE_FILE=""
PUBLISH=0
DATE=""
while [[ $# -gt 0 ]]; do
case "$1" in
--site)
@ -36,6 +40,8 @@ while [[ $# -gt 0 ]]; do
PUBLISH=1; shift ;;
--file)
SOURCE_FILE="$2"; shift 2 ;;
--date)
DATE="$2"; shift 2 ;;
*)
echo "Unknown argument: $1" >&2
exit 1 ;;
@ -104,6 +110,9 @@ echo "Server: $SERVER"
echo "Status: $STATUS"
echo "Categories: $CATEGORIES"
echo "Tags: $TAGS"
if [[ -n "$DATE" ]]; then
echo "Date: $DATE"
fi
if [[ -n "$POST_ID" ]]; then
echo "Editing post: $POST_ID"
fi
@ -126,7 +135,9 @@ PAYLOAD=$(jq -n \
--arg status "$STATUS" \
--argjson categories "$CATEGORIES_JSON" \
--argjson tags "$TAGS_JSON" \
'{title: $title, content: $content, status: $status, categories: $categories, tags: $tags}')
--arg date_gmt "${DATE%Z}" \
'{title: $title, content: $content, status: $status, categories: $categories, tags: $tags}
+ (if $date_gmt != "" then {date_gmt: $date_gmt} else {} end)')
BASE_URL="$SERVER"
[[ "$BASE_URL" != http://* && "$BASE_URL" != https://* ]] && BASE_URL="https://$BASE_URL"

View File

@ -97,6 +97,18 @@ assert_eq "trailing slash: exit code" "0" "$?"
REQ=$(cat "$MOCK_WP_REQUEST_FILE")
assert_eq "trailing slash: path has no double slash" "/wp-json/wp/v2/posts/" "$(jq -r '.path' <<<"$REQ")"
# --- --date backdates the post via date_gmt ---
rm -f "$MOCK_WP_REQUEST_FILE" "$MOCK_WP_CONTROL_FILE"
run_post_sh --file "$POST_FILE" --date "2026-07-27T10:00:00Z" >/dev/null
assert_eq "date: exit code" "0" "$?"
REQ=$(cat "$MOCK_WP_REQUEST_FILE")
assert_eq "date: date_gmt sent, trailing Z stripped" "2026-07-27T10:00:00" "$(jq -r '.payload.date_gmt' <<<"$REQ")"
rm -f "$MOCK_WP_REQUEST_FILE" "$MOCK_WP_CONTROL_FILE"
run_post_sh --file "$POST_FILE" >/dev/null
REQ=$(cat "$MOCK_WP_REQUEST_FILE")
assert_eq "no date: date_gmt omitted" "true" "$(jq -r '.payload | has("date_gmt") | not' <<<"$REQ")"
# --- edit an existing post ---
rm -f "$MOCK_WP_REQUEST_FILE" "$MOCK_WP_CONTROL_FILE"
run_post_sh --file "$POST_FILE" --edit 99 >/dev/null