У меня в настоящее время проблема с моим настраиваемым плагином. Он фактически регистрирует все действия / фильтры, запущенные в файл (или на экран). Мне нужно как-то обновить свои параметры в db при отправке формы. Вот сам код:
class WP_Test_Logging_Plugin { //required for the file name private $yymmddhhmmss; private $data; public function __construct() { add_action( 'all', array( $this, 'log_to' ) ); add_action( 'admin_menu', array( $this, 'menu' ) ); add_action( 'admin_print_styles', array( $this, 'plugin_theme_style' ) ); add_action( 'template_redirect', array( $this, 'on_admin_form_submit' ) ); $this->yymmddhhmmss = date( 'YMDHis' ); if ( get_option( 'where_to_log_to' ) == false ) { update_option( 'where_to_log_to', 1 ); } $this->data = get_option( 'where_to_log_to' ); }
метод, который я использую для обработки формы
public function on_admin_form_submit() { if ( isset( $_POST['selection'] ) ) { update_option( 'where_to_log_to', $_POST['selection'] ); } }
Есть ли способ об этом? Благодаря!
Во-первых, template_redirect
– это передний конец. Он никогда не срабатывает в вашем резервном хранилище. Вам нужно выбрать бэкэнд-крючок, например admin_init
для подключения вашей функции.
Во-вторых, на основе вашего pastebin из вашего другого вопроса , ваш код имеет checked
атрибут, жестко закодированный для обоих ваших радио-ящиков, что приводит к тому, что он по умолчанию остается последним. Вы хотите изменить свою форму следующим образом:
<input type="radio" <?php checked($this->data, 1); ?> value="1" name="selection" >
В-третьих, вам нужно убедиться, что оба ваших переключателя имеют атрибут value
.
В-четвертых, вам нужно обновить этот параметр, когда вы сохраните …
public function on_admin_form_submit() { if ( isset( $_POST['selection'] ) ) { if ($_POST['selection'] == 1){ update_option( 'where_to_log_to', 1 ); } else { update_option( 'where_to_log_to', 2 ); } } $this->data = get_option( 'where_to_log_to', 1 ); }
Обратите внимание, что я явно сохранил значения 1 и 2.
Я думаю, что есть.