Skip to content

User Actions – astrojs-wp-integration

User actions let you create, update, and delete WordPress users from Astro server-side code.


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),
};

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.


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',
});

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.


User actions expose base schemas for extension:

  • createUserInputSchema
  • updateUserInputSchema
  • deleteUserInputSchema

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(),
}),
}),
};
  • TypeScript88%
  • PHP11%
  • Astro1%