How to put single-***.php in a specific folder?

Changing how WordPress loads files can be very difficult and potentially destroy logic other plugins rely on. Instead, I usually make use of get_template_part() in this case like so

single.php

<?php

get_template_part('singles/single', get_post_type());

And your files like

  • singles/single-foo.php (for CPT foo)
  • singles/single-bar.php (for CPT bar)
  • singles/single.php (this is the default)