Ваш js отправляет данные на файл-обработчик, который является входной точкой. Воспринимайте его как
API endpoint. Потому что отправить запрос на файл
functions.php
вы не сможете, это include. А вот
/wp-admin/admin-ajax.php
- это не include, там поднимается слегка облегченная версия всего WordPress которая рассчитана исключительно на то, чтобы принять ваши отправленные данные, определить какой action вы хотите использовать и через этот action передать полученные данные на обработчик, который висит на этом экшне. И вот уже в
functions.php
вы на этот экшн в формате
wp_ajax_{$action}
и
wp_ajax_nopriv_{$action}
подключаете свой обработчик, который примет отправленные данные, сделает с ними все что нужно и вернет ответ, который в свою очередь
/wp-admin/admin-ajax.php
вернет обратно вашему js.
По ссылке
Пычев Анатолий более подробно с примерами. А вообще откройте в редакторе сам файл
/wp-admin/admin-ajax.php
и часть вопросов сама отпадет.