Функция 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 и делает возможным подключение к серверу для операций, требующих прав записи.