new WP_Query(), have_posts() return false in user_register hook

I resolved this by adding 'post_status' => 'draft' to the $args array, as below
$args = array(
'meta_query' => array(
array(
'key' => 'sending_time',
'value' => 'on_registration',
'compare' => '=',
)
),
'post_type' => '_jq_notifications',
'posts_per_page' => -1,
'post_status' => 'draft'
);


The custom post type “_jq_notifications” default status was draft.

The documentation here says

post_status: Default value is ‘publish‘, but if the user is logged in, ‘private‘ is added. Public custom post statuses are also included by default. And if the query is run in an admin context (administration area or AJAX call), protected statuses are added too. By default protected statuses are ‘future‘, ‘draft‘ and ‘pending‘.