Skip to main content

wp user create

Overview

Create WordPress user accounts directly from the terminal. Supports all user profile fields, role assignment, and password options — perfect for onboarding, staging setup, and automation scripts.

What It Does

wp user create inserts a new user record into the WordPress database and fires the user_register action hook, just like a manual registration through wp-admin. You can specify the role, password, name, and any standard user field in a single command.

Syntax

wp user create <user-login> <user-email> [OPTIONS]

Arguments & Options

Argument / FlagDescription
USER_LOGINUsername (login slug)
USER_EMAILUser email address
--role=ROLEWordPress role (e.g. subscriber, editor, administrator)
--user_pass=PASSWORDSet explicit password; omit to auto-generate
--first_name=NAMEFirst name
--last_name=NAMELast name
--display_name=NAMEPublic display name
--user_url=URLUser website URL
--user_registered=DATERegistration date (MySQL format: YYYY-MM-DD HH:MM:SS)
--porcelainOutput only the new user ID (useful for scripting)

Basic Usage

Create a subscriber with auto-generated password

wp user create newuser newuser@example.com --role=subscriber

Output:

Success: Created user 23.
Password: Kj8!mN@xQp2vL

Create with an explicit password

wp user create editor1 editor1@example.com --role=editor --user_pass='MySecurePass!2026'

Create with full profile

wp user create sarah sarah@example.com \
--role=author \
--first_name="Sarah" \
--last_name="Nolan" \
--display_name="Sarah Nolan" \
--user_url="https://example.com/team/sarah"

Output only the new user ID (for scripting)

USER_ID=$(wp user create bot bot@example.com --role=subscriber --porcelain)
echo "Created user: ${USER_ID}"

Real-World Scenarios

Scenario 1: Onboard a content team

wp user create editor1 e1@company.com --role=editor --first_name="Alice"
wp user create editor2 e2@company.com --role=editor --first_name="Bob"
wp user create author1 a1@company.com --role=author --first_name="Carol"
wp user list --fields=user_login,user_email,roles --format=table

Scenario 2: Create admin on broken site (no wp-admin access)

wp user create recovery recovery@yourdomain.com \
--role=administrator \
--user_pass='TempRecover!2026'

Scenario 3: Bulk create users from CSV

#!/bin/bash
# Expected CSV: login,email,role,first_name
while IFS=',' read -r login email role fname; do
wp user create "$login" "$email" --role="$role" --first_name="$fname"
done < team.csv
wp user list --format=table

Scenario 4: Staging environment user setup

#!/bin/bash
# create-staging-users.sh
for role in administrator editor author contributor subscriber; do
wp user create "test_${role}" "${role}@staging.example.com" \
--role="$role" \
--user_pass='Staging!2026' \
--display_name="Test ${role^}"
done

Best Practices

  1. Always use --role explicitly — the default role from Settings may not be what you want.
  2. Use --user_pass only on staging/dev — let WordPress auto-generate and email on production.
  3. Use --porcelain in scripts to capture the new user ID for follow-up commands.
  4. Back up the database before bulk user creation on production.
  5. Avoid creating admin accounts with weak passwords even in development.

Troubleshooting

ProblemCauseFix
Error: That username is already registeredDuplicate loginUse a unique login slug
Error: That email address is already registeredDuplicate emailUse a unique email
Error: Invalid roleTypo in role nameRun wp role list to verify
User created but cannot log inWrong password encodingUse --user_pass with explicit string

Quick Reference

wp user create <login> <email> --role=<role>                # Basic create
wp user create <login> <email> --role=admin --user_pass='X' # Explicit password
wp user create <login> <email> --role=editor --porcelain # Return ID only
wp user list --fields=user_login,roles --format=table # Verify

Next Steps