Можно создать роутер, который обслуживает url и контроллер, который, в зависимости от состояния роутера, будет подключать тот или иной класс, и вызывать требуемый метод.
По всей видимости, сервер не распознаёт тип вашего файла и отвергает его.
Нужно разбираться с API. Какие файлы принимает сервер (форматы, расширения), нет ли ограничений на размер файла. Возможно, при отправке данных нужно задать какие-то заголовки.
Вот и написано вам: Вызов не существующей функции bp_core_get_directory_page_ids()
В файле /home/c/cr17033/app/public_html/wp-content/themes/vikinger/template-part/header/header-logged-out.php
Строка 100
И это естественно, так как при каждом следующем запросе вы перезаписываете переменную $result.
Вам нужно каждый запрос получить в свою переменную $result1, $result2, $result3, потом объеденить их в одну и уже её передать в рендер.
Очевидно, CMS хочет дополнительные модули в php.
sudo apt install php-mbstring php-fileinfo php-gd openssl
Что за расширения filter и hash не знаю, поищите
На onchange инпута нужно навесить вызов ajax запроса, который передаст в введённую строку внешнему обработчику, который подключится к ftp и передаст данные.
Могу помочь развернуть на WebBasic CMS. Хранение в файлах JSON, есть словарно-управляемое поле типа TREE в котором вы можете налету накидывать нужные вам поля и сущности.