Вопрос или проблема
Я написал плагин, который взаимодействует с API сторонней рассылки. Я создал страницу настроек для моего плагина, которая включает две кнопки:
- кнопку отправки, созданную с помощью
submit_button()
, которая сохраняет форму - кнопку “тестировать настройки”, которая должна использовать текущие значения из формы без их сохранения
Вот что у меня есть на данный момент:
echo '<form method="post" action="options.php">';
settings_fields('myplugin_settings');
do_settings_sections('myplugin');
echo '<p>';
submit_button('Тестировать настройки', '', 'test', false);
echo ' ';
submit_button(null, 'primary', 'submit', false);
echo '</p></form>';
Это даёт две кнопки, как и ожидалось:
Однако я не знаю, как переопределить действие для кнопки “тестировать настройки”. Есть ли крючок для этого? Я не могу найти документацию по этому вопросу.
Мне не совсем понятно, для чего нужна кнопка “тестировать”, что, как я предполагаю, может иметь значение, но, в общем, я обнаружил, что, чтобы сделать так, чтобы две кнопки работали независимо на одной странице настроек, проще всего поместить их в две отдельно определенные формы, даже если две кнопки будут размещены рядом друг с другом.
Самый простой способ – просто создать “мини-форму” для “специальной” кнопки и, если нужно, использовать немного CSS, чтобы разместить вторую кнопку перед или над, и т.д., “основной” кнопкой. Таким образом, в зависимости от того, что ещё происходит там, где вы размещаете кнопку, если вам действительно нужно и хотите, чтобы кнопка тестирования отображалась первой, вы можете “поплыть” её влево. Также вы должны заметить, что, хотя вы можете стилизовать кнопку, созданную с помощью “submit_button”, используя дополнительные параметры (“type”, “attribute” – см. Codex), вы не обязаны использовать её с API настроек: вы можете создать ту же кнопку, а затем добавить любые селекторы или стили элементов с помощью обычного HTML кнопки, который генерирует submit_button().
Так что, в основном, чтобы проиллюстрировать:
echo '<form method="post" action="options.php">';
settings_fields('myplugin_settings');
do_settings_sections('myplugin');
echo '<p>';
submit_button(null, 'primary', 'submit', false);
echo '</form>';
echo '
<form method="post" name="test-button">
<span id="test-button">
<input id="test-settings" type="submit" value="Тестировать настройки" class="button" >
</span>
</form>
';
Ответ или решение
Для добавления вторичной кнопки на страницу настроек плагина WordPress с кастомным действием, рекомендуется использовать две отдельные формы. Это обеспечит независимость действия каждой кнопки и позволит выполнить разные действия при нажатии на каждую из них.
Есть несколько шагов, которые нам нужно выполнить для реализации вашей идеи. Вот как это можно сделать:
-
Создание двух отдельных форм: Одна для кнопки "Сохранить изменения" и другая для кнопки "Проверить настройки".
-
Обработка действий каждой кнопки: Убедитесь, что обработка данных "Проверить настройки" выполняется на сервере.
Ниже представлен пример кода, который можно использовать на странице настроек вашего плагина:
echo '<form method="post" action="options.php">';
settings_fields('myplugin_settings');
do_settings_sections('myplugin');
echo '<p>';
// Кнопка для сохранения настроек
submit_button(null, 'primary', 'submit', false);
echo '</p>';
echo '</form>';
// Вторая форма для кнопки "Проверить настройки"
echo '<form method="post" action="">';
echo '<p>';
// Кнопка "Проверить настройки"
echo '<input type="submit" name="test_settings" value="Проверить настройки" class="button" />';
echo '</p>';
echo '</form>';
- Обработка нажатия кнопки "Проверить настройки": Чтобы выполнить кастомное действие при нажатии на кнопку "Проверить настройки", вы можете использовать следующий код, который проверит, была ли нажата эта кнопка:
if (isset($_POST['test_settings'])) {
// Получаем значения из формы настроек
$options = get_option('myplugin_settings');
// Здесь вы можете добавить логику тестирования настроек
// Например, выполнить запрос к API и вывести результаты
$response = my_api_test_function($options);
if ($response) {
echo '<div class="notice notice-success"><p>Настройки успешно протестированы!</p></div>';
} else {
echo '<div class="notice notice-error"><p>Ошибка при тестировании настроек.</p></div>';
}
}
- Создание функции для тестирования API: Также вам нужно будет создать функцию
my_api_test_function
, которая будет осуществлять запрос к вашему внешнему API с использованием настроек.
Преимущества использования отдельных форм заключаются в том, что каждая кнопка может обрабатывать свои собственные действия, не влияя на другую. Это обеспечивает лучшую организацию кода и пользовательского интерфейса.
Такой подход следует документированным стандартам WordPress и упрощает поддержку и расширение функциональности вашего плагина в будущем.