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​