Intereting Posts
Вставка записи MySQL в таблицу с массивом имен полей и массивом значений Rewrite Rule Regex Как register_post_type знает, как и какую функцию использовать из функции add_action? Когда уместно ставить функции на шаблон страницы vs. functions.php? Можно ли установить переменную для get_post_meta? Переменная в массиве не работает Более одной динамической боковой панели Сообщения отлично не отображаются Проблема с контекстной помощью, переписывающей существующий контент Категории ссылок, включая все сообщения Использование пользовательских полей в URL-адресе пользовательского типа отправки Отключить комментарии для данного CPT? Как установить изображение с изображением (уменьшенное изображение) по URL-адресу изображения при использовании wp_insert_post ()? Рекомендации по категоризации для настраиваемого типа сообщений Как я могу вернуть вывод короткого кода в начало содержимого?

do_action () подключиться к загрузке (страница)

Я создал страницу настроек темы admin, где я сохраняю все свои настройки в wp_options. Теперь я хочу развернуть эту страницу настроек плагинами, которые могут быть активированы и деактивированы в зависимости от того, какие настройки должны иметь эта тема. Например, разные поставщики платежей в каждой стране.

Поля полей параметров страницы настроек упорядочены по вкладкам, например, общие, оплата, измерение и т. Д.

Поэтому я должен сделать 3 вещи доступными:

  1. Вкладки
  2. Содержимое вкладки
  3. Сохранение содержимого вкладки

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

Admin init:

function gtp_admin_init() { $settings = get_option( 'gtp_theme_settings' ); if( empty( $settings ) ) { $settings = array(); add_option( 'gtp_theme_settings', $settings, '', 'yes' ); } } add_action( 'init', 'gtp_admin_init' ); 

Создайте страницу настроек администратора и загрузите страницу параметров gtp_load_settings_page ():

 function gtp_settings_page_init() { $settings_page = add_theme_page( __( 'Theme settings', 'gtp_translate' ), __( 'Theme settings', 'gtp_translate' ), 'edit_theme_options', 'theme-settings', 'gtp_settings_page' ); add_action( 'load-' . $settings_page, 'gtp_load_settings_page' ); } add_action( 'admin_menu', 'gtp_settings_page_init' ); 

Загрузите правую вкладку после отправки данных:

 function gtp_load_settings_page() { if( isset( $_POST['submit'] ) ) { check_admin_referer( 'gtp-settings-page' ); gtp_save_theme_settings(); $url_parameters = isset( $_GET['tab'] ) ? 'updated=true&tab=' . $_GET['tab'] : 'updated=true'; wp_redirect( admin_url( 'themes.php?page=theme-settings&' . $url_parameters ) ); exit; } } 

Сохранить настройки + действие:

В нижней части этой части вы видите, что я вставил функцию do_action () для сохранения содержимого вкладки.

 function gtp_save_theme_settings() { global $pagenow; // Get settings from options table $settings = get_option( 'gtp_theme_settings' ); // Check which tab is active if( $pagenow == 'themes.php' && $_GET['page'] == 'theme-settings' ) { if( isset( $_GET['tab'] ) ) $tab = $_GET['tab']; else $tab = 'general'; } // Check which data to save switch( $tab ) { case 'general' : $settings['gtp_contact_redirect'] = $_POST['gtp_contact_redirect']; $settings['gtp_review_redirect'] = $_POST['gtp_review_redirect']; break; case 'payment' : $settings['gtp_payment_setting'] = $_POST['gtp_payment_setting']; break; } // Hook save settings do_action( 'gtp_theme_settings_tab_save', $tab, $settings, $_POST ); $updated = update_option( 'gtp_theme_settings', $settings ); } 

Сохранить add_action в моем файле плагина

 function ac_theme_settings_tab_save( $tab, $settings, $postdata ) { if( $tab == 'adcalls' ) { $settings['gtp_adcalls_domain_id'] = $postdata['gtp_adcalls_domain_id']; } } add_action( 'gtp_theme_settings_tab_save', 'ac_theme_settings_tab_save', 10, 3 ); 

Я изменил do_action () для apply_filter (). Это работало следующим образом:

 // Filter save settings $settings = apply_filters( 'gtp_theme_settings_tab_save', $settings, $tab, $_POST ); $updated = update_option( 'gtp_theme_settings', $settings ); 

И тогда мой add_filter в файле плагина выглядит так:

 function ac_theme_settings_tab_save( $settings, $tab, $postdata ) { if( $tab == 'adcalls' ) { $settings['gtp_adcalls_domain_id'] = $postdata['gtp_adcalls_domain_id']; } return $settings; } add_filter( 'gtp_theme_settings_tab_save', 'ac_theme_settings_tab_save', 10, 3 );