Функция request_filesystem_credentials() в WordPress отображает форму для ввода данных подключения к серверу через FTP или SSH, чтобы WordPress мог записывать файлы в файловую систему. Эта функция используется для обновлений ядра, установки плагинов и тем, а также для других операций, требующих записи на сервер.
request_filesystem_credentials(
string $form_post,
string $type = '',
bool|WP_Error $error = false,
string $context = '',
array $extra_fields = null,
bool $allow_relaxed_file_ownership = false
): bool|array
Эта функция показывает пользователю форму для ввода данных подключения, таких как хост, логин, пароль и тип соединения (FTP/SSH). Данные сохраняются за исключением пароля. Если сервер настроен для работы напрямую, функция возвращает true, не запрашивая дополнительных данных.
Параметры функции
$form_post(строка, обязательный): URL, на который отправляется форма с данными.$type(строка, необязательный): Тип файловой системы для соединения (direct,ftp,ftps,ssh). По умолчанию пустая строка.$error(логическое илиWP_Error, необязательный): Указывает, было ли подключение неудачным, либо содержит объект ошибкиWP_Error. По умолчаниюfalse.$context(строка, необязательный): Полный путь к директории, в которой требуется проверить доступ на запись. По умолчанию пустая строка.$extra_fields(массив, необязательный): Дополнительные поля для отправки вместе с формой. По умолчаниюnull.$allow_relaxed_file_ownership(логическое, необязательный): Разрешает записи с группой/мировым доступом. По умолчаниюfalse.
Возвращаемое значение
Функция возвращает:
true, если данные подключения не требуются.false, если данные требуются, но не были предоставлены.- Массив данных подключения, если они были предоставлены.
Пример 1: Отображение формы для данных FTP с пользовательскими параметрами
В этом примере мы вызываем функцию, чтобы запросить данные для соединения через FTP. Если функция возвращает false, мы выводим сообщение об ошибке.
$form_post = admin_url('update.php?action=update-plugin');
$creds = request_filesystem_credentials(
$form_post,
'ftp',
false,
WP_CONTENT_DIR . '/uploads'
);
if (false === $creds) {
echo 'Требуются данные FTP для подключения к серверу.';
return;
}
Здесь:
$form_postуказывает на URL, куда отправится форма.$typeустановлен как'ftp', что указывает на использование FTP для передачи данных.$contextзадан как путь до директории/uploadsв папкеwp-content.
Пример 2: Использование SSH-подключения с дополнительными полями
В этом примере добавляются дополнительные поля, чтобы запросить данные SSH-соединения с проверкой на наличие ошибки.
$form_post = admin_url('update.php?action=update-core');
$extra_fields = array('field_name' => 'field_value');
$creds = request_filesystem_credentials(
$form_post,
'ssh',
new WP_Error('connection_error', 'Ошибка подключения'),
WP_CONTENT_DIR,
$extra_fields
);
if (is_wp_error($creds)) {
echo 'Не удалось подключиться: ' . esc_html($creds->get_error_message());
return;
}
Здесь:
$typeзадан как'ssh', указывая на использование SSH-соединения.$errorсодержит объектWP_Error, что сигнализирует о неудачной попытке подключения.$extra_fieldsиспользуется для добавления дополнительных полей к отправляемой форме.
Пример 3: Разрешение на запись с ослабленными правами доступа
В этом примере добавлен параметр $allow_relaxed_file_ownership, который разрешает более широкие права записи.
$form_post = admin_url('admin.php?page=custom_page');
$creds = request_filesystem_credentials(
$form_post,
'ftp',
false,
WP_CONTENT_DIR . '/plugins',
null,
true
);
if ($creds === false) {
echo 'Для выполнения действия требуются данные FTP с ослабленными правами доступа.';
return;
}
Полезные советы
- Фильтр
request_filesystem_credentials: можно использовать для переопределения стандартного поведения и создания собственных условий запроса данных подключения. - Безопасность: всегда проверяйте и используйте
wp_nonce_field()для защиты данных формы.
Заключение
Функция request_filesystem_credentials() предоставляет гибкий интерфейс для обработки данных FTP/SSH и делает возможным подключение к серверу для операций, требующих прав записи.