Actions
lh_user_provisioning_user_provisioned — fires after ensure_user() completes.
do_action( 'lh_user_provisioning_user_provisioned', WP_User $user, bool $is_new, array $args );
This plugin also listens to two WordPress core hooks network-wide, both at priority 20 so it runs after other plugins’ own handlers as the final word on convention — not exposed as its own hooks, documented here for completeness:
user_register— calls the guardedensure_login_matches_email()/ensure_nicename_matches_id()pair on every new user created anywhere on the network, not just via this plugin’s own APIprofile_update— same pair, e.g. when someone’s email changes via a profile edit form elsewhere on the network
Filters
lh_user_provisioning_pre_create_userdata — filters the $userdata array immediately before wp_insert_user() is called.
apply_filters( 'lh_user_provisioning_pre_create_userdata', array $userdata, string $email, array $args );
lh_user_identity_get_user_by_email_fallback (consumed, not defined here) — used internally by resolve_existing_user_by_email() to resolve alias emails when lh-user-identity is active. Documented no-op otherwise, so it is always safe to call unconditionally.
apply_filters( 'lh_user_identity_get_user_by_email_fallback', false, string $email );
Cron
lh_user_provisioning_integrity_check — runs hourly. Scans for users where user_login != user_email or user_nicename != CAST(ID AS CHAR), fixing up to 50 per run. With the user_register/profile_update hooks providing real-time coverage everywhere, this is a backstop for accounts predating those hooks (or that slip through some other way) rather than the primary enforcement mechanism.