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 / Flag | Description |
|---|---|
USER_LOGIN | Username (login slug) |
USER_EMAIL | User email address |
--role=ROLE | WordPress role (e.g. subscriber, editor, administrator) |
--user_pass=PASSWORD | Set explicit password; omit to auto-generate |
--first_name=NAME | First name |
--last_name=NAME | Last name |
--display_name=NAME | Public display name |
--user_url=URL | User website URL |
--user_registered=DATE | Registration date (MySQL format: YYYY-MM-DD HH:MM:SS) |
--porcelain | Output 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
- Always use
--roleexplicitly — the default role from Settings may not be what you want. - Use
--user_passonly on staging/dev — let WordPress auto-generate and email on production. - Use
--porcelainin scripts to capture the new user ID for follow-up commands. - Back up the database before bulk user creation on production.
- Avoid creating admin accounts with weak passwords even in development.
Troubleshooting
| Problem | Cause | Fix |
|---|---|---|
Error: That username is already registered | Duplicate login | Use a unique login slug |
Error: That email address is already registered | Duplicate email | Use a unique email |
Error: Invalid role | Typo in role name | Run wp role list to verify |
| User created but cannot log in | Wrong password encoding | Use --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
wp user update— update fields after creation.wp user set-role— change the user's role.wp user list— view all users and their roles.