wp user meta
Overview
Access and manage user meta data stored in wp_usermeta. User meta holds custom fields like preferences, billing info, plugin-specific settings, and any data plugins attach to a user.
What It Does
wp user meta provides full CRUD access to user meta via get_user_meta() / update_user_meta() / delete_user_meta() under the hood.
Subcommands
| Subcommand | Description |
|---|---|
wp user meta get USER KEY | Retrieve a meta value |
wp user meta add USER KEY VALUE | Add (insert) a new meta entry |
wp user meta update USER KEY VALUE | Update existing meta |
wp user meta delete USER KEY | Delete a meta key |
wp user meta list USER | List all meta for a user |
wp user meta patch USER KEY SUBKEY VALUE | Update a subkey in a serialized meta value |
wp user meta pluck USER KEY SUBKEY | Get a subkey from serialized meta |
Basic Usage
Get a meta value
wp user meta get 14 billing_city
Add new meta
wp user meta add 14 department "Engineering"
Update existing meta
wp user meta update 14 billing_city "Singapore"
Delete meta key
wp user meta delete 14 temporary_access_flag
List all meta for a user
wp user meta list 14 --format=table
Real-World Scenarios
Scenario 1: Audit custom meta across all users
for id in $(wp user list --field=ID); do
VAL=$(wp user meta get "$id" crm_customer_id 2>/dev/null)
if [[ -n "$VAL" ]]; then
echo "User $id: crm_customer_id = $VAL"
fi
done
Scenario 2: Set onboarding flag for new users
#!/bin/bash
# Mark newly created users as requiring onboarding
for id in $(wp user list --role=subscriber --field=ID); do
EXISTING=$(wp user meta get "$id" onboarding_complete 2>/dev/null)
if [[ -z "$EXISTING" ]]; then
wp user meta add "$id" onboarding_complete "0"
fi
done
Scenario 3: Migrate WooCommerce meta after domain change
for id in $(wp user list --field=ID); do
OLD=$(wp user meta get "$id" billing_email 2>/dev/null)
NEW="${OLD/@olddomain.com/@newdomain.com}"
if [[ "$OLD" != "$NEW" && -n "$OLD" ]]; then
wp user meta update "$id" billing_email "$NEW"
echo "Updated billing_email for user $id"
fi
done
Best Practices
- Use
listbefore modifying to see what meta keys already exist. - Use
--format=jsonwithlistfor structured output. - Be careful with serialized values — use
patch/pluckfor array meta instead of overwriting the whole value.
Troubleshooting
| Problem | Cause | Fix |
|---|---|---|
get returns empty | Meta key does not exist | Verify with wp user meta list USER |
| Serialized value corrupted | Directly wrote to JSON over a PHP serialized field | Use patch subcommand for nested data |
Quick Reference
wp user meta get <user> <key> # Get single meta
wp user meta add <user> <key> <value> # Add meta
wp user meta update <user> <key> <value> # Update meta
wp user meta delete <user> <key> # Delete meta
wp user meta list <user> --format=table # All meta
Next Steps
wp user get— view core user fields.wp user update— update standard user fields.