This is probably a longshot but I'm out of ideas.
When a user registers on my WordPress site (using WordPress core registration form) it sends an email with the standard "...to set your password, visit the following address..." message. However, with my custom theme there are no query strings at the end of the link, so it just goes to example.com/wp-login.php
I disabled my theme and registered another user and that email did have the necessary query strings.
While I was glad to see it worked, I'm now completely stumped as to why my theme is stripping them off.
I do have some custom security functions, but the only thing that targets the login page is after a user triggers an invalid login attempt using the login_errors
hook.
I also have the WordFence plugin active, but it was also active when I changed themes and had success.
I hope this question isn't too vague. I'm just looking for troubleshooting steps for this
wp_new_user_notification
in your custom theme?