Skip to main content

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​

FlagDescription
--user_email=EMAILNew email address
--user_pass=PASSNew password
--display_name=NAMEPublic display name
--first_name=NAMEFirst name
--last_name=NAMELast name
--user_url=URLWebsite URL
--user_nicename=SLUGURL-friendly name
--description=BIOBiographical info
--skip-emailSkip 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​

  1. Use --skip-email on bulk resets to avoid spamming users with notification emails.
  2. Back up first — wp db export before any bulk updates.
  3. Confirm the user exists with wp user get USER before scripting large loops.
  4. Test on staging when migrating emails across an entire site.

Troubleshooting​

ProblemCauseFix
Error: Invalid user ID, login or emailWrong user referenceUse wp user list to find the correct identifier
Email already in useDuplicateVerify with wp user list --fields=user_email
Password update silently failsSpecial chars unescapedWrap 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​