You’re missing 2 things. Since your running this inside a function you need to declare the global $post variable.
function custom_speakers() {
global $post;
The second is that you’re not calling the_post()
while ( $query->have_posts() ) {
$query->the_post();