Как добавить вторичную кнопку на страницу настроек с пользовательским действием?

Вопрос или проблема

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

Есть несколько шагов, которые нам нужно выполнить для реализации вашей идеи. Вот как это можно сделать:

  1. Создание двух отдельных форм: Одна для кнопки "Сохранить изменения" и другая для кнопки "Проверить настройки".

  2. Обработка действий каждой кнопки: Убедитесь, что обработка данных "Проверить настройки" выполняется на сервере.

Ниже представлен пример кода, который можно использовать на странице настроек вашего плагина:

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>';
  1. Обработка нажатия кнопки "Проверить настройки": Чтобы выполнить кастомное действие при нажатии на кнопку "Проверить настройки", вы можете использовать следующий код, который проверит, была ли нажата эта кнопка:
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>';
    }
}
  1. Создание функции для тестирования API: Также вам нужно будет создать функцию my_api_test_function, которая будет осуществлять запрос к вашему внешнему API с использованием настроек.

Преимущества использования отдельных форм заключаются в том, что каждая кнопка может обрабатывать свои собственные действия, не влияя на другую. Это обеспечивает лучшую организацию кода и пользовательского интерфейса.

Такой подход следует документированным стандартам WordPress и упрощает поддержку и расширение функциональности вашего плагина в будущем.

Оцените материал
Добавить комментарий

Капча загружается...