User Actions – astrojs-wp-integration
14 Stars
View on GitHub
User actions let you create, update, and delete WordPress users from Astro server-side code.
Actions Overview Shared auth strategies, validation model, and error mapping for all actions.
Post Actions Reference patterns for resource actions and custom schema extension.
Ability Actions Run WordPress abilities from Astro actions.
Register the three user action factories in your Astro project’s src/actions/index.ts:
import { createCreateUserAction, createUpdateUserAction, createDeleteUserAction,} from 'wp-astrojs-integration';import { WordPressClient } from 'fluent-wp-client';
const wp = new WordPressClient({ baseUrl: import.meta.env.WP_URL, auth: { username: import.meta.env.WP_USERNAME, password: import.meta.env.WP_APP_PASSWORD, },});
export const server = { createUser: createCreateUserAction(wp), updateUser: createUpdateUserAction(wp), deleteUser: createDeleteUserAction(wp),};Creating a user
Section titled “Creating a user”const { data, error } = await Astro.callAction(actions.createUser, { username: 'editor-jane', email: 'jane@example.com', password: 'strong-password', name: 'Jane Editor', roles: ['editor'],});Required fields are username, email, and password.
Updating a user
Section titled “Updating a user”updateUser accepts a required id and any writable user fields.
const { data, error } = await Astro.callAction(actions.updateUser, { id: 15, name: 'Jane E.', description: 'Editorial lead',});Deleting a user
Section titled “Deleting a user”WordPress requires user deletion to be force-delete and requires reassignment of existing content.
This action enforces that with a required reassign field:
const { data, error } = await Astro.callAction(actions.deleteUser, { id: 15, reassign: 1, force: true,});
// data -> { id: 15, deleted: true, reassignedTo: 1 }If reassign is omitted, input validation fails before any request reaches WordPress.
Typed schemas
Section titled “Typed schemas”User actions expose base schemas for extension:
createUserInputSchemaupdateUserInputSchemadeleteUserInputSchema
You can extend input validation and response parsing:
import { WordPressClient } from 'fluent-wp-client';import { createCreateUserAction, createUserInputSchema } from 'wp-astrojs-integration';import { z } from 'astro/zod';
const wp = new WordPressClient({ baseUrl: import.meta.env.WP_URL, auth: { username: import.meta.env.WP_USERNAME, password: import.meta.env.WP_APP_PASSWORD, },});
export const server = { createUser: createCreateUserAction(wp, { schema: createUserInputSchema.extend({ app_source: z.string().optional(), }), responseSchema: z.object({ id: z.number().int().positive(), slug: z.string(), }), }),};