Intereting Posts
W3 Total Cache плагин хроническое сообщение Лучший подход для пользовательской базы данных, заполняющей типы пользовательских сообщений WP Прокрутите через пользовательский тип сообщения, а затем покажите детям на каждой итерации Показать домашнюю страницу (только) Счетчик посещений WP_Query не распознает таксономический параметр в пользовательском поиске Изображение и короткий код не отображаются в выдержке Пользовательский запрос – на основе ввода пользователем Как проверить, загружает ли пользователь / устанавливает изображение в качестве отображаемого изображения? Получить все пользовательские типы сообщений Внутренние ссылки меню не изменяются после дублирования веб-сайта WordPress Разработка плагинов: предварительный просмотр плагина Buggy Добавление пользовательских стилей в панель инструментов выпадающего меню MCE Скрыть определенные родительские категории из сообщения Динамический запрос WordPress AJAX Как добавить настраиваемый обмен на экран администратора управления меню?

Сохранение динамически созданных опций

У меня есть страница параметров с динамической повторяемой строкой таблицы. В настоящее время есть два поля даты, я добавлю больше на более позднем этапе. Теперь я пытаюсь сохранить данные в таблице параметров базы данных WP. Я использовал код здесь, и я знаю, что раздел foreach ($options as $option) нуждается в некоторых настройках, но не знаю с чего начать.

PHP:

  $output = '<form method="post" actions="options.php">'; $output .= '<div class="repeatable-wrap"><table class="repeatable-fields-list" style="margin-top:15px;">' . '<th>Start Date</th><th>End Date</th><th></th>'; if (!empty($options)) { $i = 1; foreach ($options as $option) { $output .= '<tr>' . '<td><input type="date" name="rt_options[start_date_'.$i.']"' . 'value="' . $label . '" class="widefat" /></td>' . '<td><input type="date" name="rt_options[end_date_'.$i.']"' . 'value="' . $option['end_' . $i] . '" class="widefat" /></td>' . '<td><a class="repeatable-field-remove button" href="#">Delete</a></td>' . '</tr>'; $i++; } } else { $output .= '<tr>' . '<td><input type="date" name="rt_options[start_date_1]"' . 'value="" class="widefat" /></td>' . '<td><input type="date" name="rt_options[end_date_1]"' . 'value="" class="widefat" /></td>' . '<td><a class="repeatable-field-remove button" href="#">Delete</a></td>' . '</tr>'; } $output .= '</table></div>' . '<div><a class="repeatable-field-add button" href="#">Add Row</a></div>' . '<div style="margin-top:45px;"><input type="submit" class="button button-primary" value="Save changes" /></div></form>'; echo $output; 

JQuery:

 jQuery(function ($) { $(document).ready(function () { $('.repeatable-wrap').find('.repeatable-field-remove:first').css('display', 'none'); $('.repeatable-field-add').click(function () { var theField = $('.repeatable-wrap').find('.repeatable-fields-list tr:last').clone(true); var theLocation = $('.repeatable-wrap').find('.repeatable-fields-list tr:last'); $('input', theField).val('').attr('name', function (index, name) { return name.replace(/(\d+)/, function (fullMatch, n) { return Number(n) + 1; }); }); $('select', theField).val('').attr('name', function (index, name) { return name.replace(/(\d+)/, function (fullMatch, n) { return Number(n) + 1; }); }); theField.insertAfter(theLocation, $(this).closest('div.repeatable-wrap')); var fieldsCount = $('.repeatable-field-remove').length; if (fieldsCount > 1) { $('.repeatable-field-remove').css('display', 'block'); } return false; }); $('.repeatable-field-remove').click(function () { $(this).closest('tr').remove(); var fieldsCount = $('.repeatable-field-remove').length; if (fieldsCount == 1) { $('.repeatable-field-remove').css('display', 'none'); } return false; }); });