Inspecting user meta should be three keystrokes, not a SQL query
A customer complains their billing address is wrong. You want to see what WooCommerce has stored. To glance at their user meta, the options are: open phpMyAdmin, run SELECT FROM wp_usermeta WHERE user_id = X, or enable a debug toolbar and navigate to the user row.
For a quick pulse check, that's all overhead.
What most people do instead
var_dump(get_user_meta($id)) in functions.phpExposes everything including serialized session tokens. Noisy, insecure.A better way: filtered, readable user meta
Run get user meta with a user ID. The command returns meta as a clean key-value list, with noisy internal keys hidden by default. Filter by specific keys, prefix wildcards like billing_*, or include internals by naming them.
billing_first_name = Annabilling_last_name = Muellerbilling_email = anna.m@example.debilling_city = Berlinbilling_country = DENoisy internals hidden. Session tokens, wp_user-settings, wp_dashboard_quick_press_last_post_id, and similar WordPress internals are filtered out by default. Name them explicitly in -filter if you need them. The output is what you care about.
How it works
Wraps get_user_meta with noise filtering. Empty -user_id falls back to current user. -filter accepts single key, comma-separated list, or prefix wildcard. Results are chain-accessible in macros as {{step1.key_name}}.
-user_id to target the logged-in userbilling_*| Parameter | Value |
|---|---|
-user_id | Target user ID. Empty uses current user. |
-filter | Single key, comma-separated list, or prefix wildcard (billing_*) |
| Hidden by default | session_tokens, wp_user-settings, dashboard state keys |
| Returns | All matching keys as chain results — reference as {{step1.key_name}} |
| Can be used in |
Real example
You want to send different follow-up emails to customers based on their country. German customers get German-language content; US customers get English.
The macro triggers on woocommerce_order_completed. Step 1: get user meta -filter=billing_country → returns step1.billing_country. Step 2 branches: if step1.billing_country == "DE", send German template; else send English. Branches execute in parallel, each path uses the right language.