I want a script in my theme, ajax.php, which I want to load or access from other frontend pages using ajax.
In ajax.php I want access to core WP functions such as get_posts(), do_shortcode() etc. I.e. I need WordPress loaded on the script.
Traditionally I have setup a page in the admin and given it a custom template so then for my ajax requests I can send to www.site.com/ajax and the custom template handles the request. While this works fine I'm pretty sure this is not the most efficient, or safest way of handling ajax on WP frontend but not sure how to do it properly.