Skip to main content

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

SubcommandDescription
wp user meta get USER KEYRetrieve a meta value
wp user meta add USER KEY VALUEAdd (insert) a new meta entry
wp user meta update USER KEY VALUEUpdate existing meta
wp user meta delete USER KEYDelete a meta key
wp user meta list USERList all meta for a user
wp user meta patch USER KEY SUBKEY VALUEUpdate a subkey in a serialized meta value
wp user meta pluck USER KEY SUBKEYGet 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

  1. Use list before modifying to see what meta keys already exist.
  2. Use --format=json with list for structured output.
  3. Be careful with serialized values — use patch / pluck for array meta instead of overwriting the whole value.

Troubleshooting

ProblemCauseFix
get returns emptyMeta key does not existVerify with wp user meta list USER
Serialized value corruptedDirectly wrote to JSON over a PHP serialized fieldUse 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