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 firstwp 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