wp user update
Overview
Modify any field on an existing WordPress user account — email, password, display name, URL, and more — without logging into wp-admin. Essential for incident response, bulk updates, and automation.
What It Does
wp user update patches one or more fields for a single user (or multiple users by ID / login). Changes trigger the profile_update action hook.
Syntax
wp user update <user> [OPTIONS]
USER can be a user ID, login slug, or email address.
Arguments & Options
| Flag | Description |
|---|---|
--user_email=EMAIL | New email address |
--user_pass=PASS | New password |
--display_name=NAME | Public display name |
--first_name=NAME | First name |
--last_name=NAME | Last name |
--user_url=URL | Website URL |
--user_nicename=SLUG | URL-friendly name |
--description=BIO | Biographical info |
--skip-email | Skip sending the password-changed notification email |
Basic Usage
Update email
wp user update john --user_email='john.new@example.com'
Reset password
wp user update 7 --user_pass='NewSecure!2026' --skip-email
Update display name and bio
wp user update sarah --display_name="Sarah N." --description="Senior editor at Example Co."
Update multiple users at once
wp user update 12 15 22 --first_name="Staff"
Real-World Scenarios
Scenario 1: Emergency password rotation
# Rotate passwords for all admin accounts
for user in $(wp user list --role=administrator --field=user_login); do
NEW_PASS=$(openssl rand -base64 16)
wp user update "$user" --user_pass="$NEW_PASS" --skip-email
echo " ${user}: ${NEW_PASS}"
done > /root/admin-passes-$(date +%Y%m%d).txt
Scenario 2: Correct email after domain migration
# Old domain: @oldcompany.com → New domain: @newcompany.com
for user in $(wp user list --field=ID); do
OLD=$(wp user get "$user" --field=user_email)
NEW="${OLD/@oldcompany.com/@newcompany.com}"
if [[ "$OLD" != "$NEW" ]]; then
wp user update "$user" --user_email="$NEW" --skip-email
echo "Updated $user: $OLD → $NEW"
fi
done
Scenario 3: Update display names from a CSV
# CSV: id,display_name
while IFS=',' read -r id name; do
wp user update "$id" --display_name="$name"
done < display-names.csv
Best Practices
- Use
--skip-emailon bulk resets to avoid spamming users with notification emails. - Back up first —
wp db exportbefore any bulk updates. - Confirm the user exists with
wp user get USERbefore scripting large loops. - Test on staging when migrating emails across an entire site.
Troubleshooting
| Problem | Cause | Fix |
|---|---|---|
Error: Invalid user ID, login or email | Wrong user reference | Use wp user list to find the correct identifier |
| Email already in use | Duplicate | Verify with wp user list --fields=user_email |
| Password update silently fails | Special chars unescaped | Wrap password in single quotes |
Quick Reference
wp user update <user> --user_email=<email> # Update email
wp user update <user> --user_pass='<pass>' # Reset password
wp user update <user> --display_name='<name>' # Update display name
wp user update <user> --user_pass='<pass>' --skip-email # Silent reset
Next Steps
wp user delete— permanently remove a user.wp user set-role— change the user's role.wp user meta— manage custom user meta fields.