dikey58
@dikey58
Самоучка - web-разработчик

Как инициализировать настройки плагина через цикл?

Как реализовать мой код, чтобы мне не приходилось объявлять массив в каждой функции и заполнить опции через цикл?
add_action('admin_init', 'plugin_settings');
function plugin_settings()
{
	$option_groups = [
		'option_group' => [
			'title' => 'Основные настройки',
			'db_name' => 'option_name',
			'section_id' => 'section_id',
			'options' => [
				'primer_field1' => 'Название опции',
				'primer_field2' => 'Другая опция'
			]
		],
		'selectors' => [
			'title' => 'Селекторы полей',
			'db_name' => 'selector',
			'section_id' => 'selector_sections',
			'options' => [
				'date_from' => 'Дата от',
				'date_to' => 'Дата до',
				'adults' => 'Взрослые',
				'childs' => 'Дети'
			]
		]
	];
	foreach ( $option_groups as $group => $g_opt) {
		// параметры: $option_group, $option_name, $sanitize_callback
		register_setting( $group, $g_opt['db_name'], 'sanitize_callback');

		// параметры: $id, $title, $callback, $page
		add_settings_section($g_opt['section_id'], $g_opt['title'], '', 'primer_page');

		foreach ($g_opt['options'] as $opt_id => $opt_title) {
			// параметры: $id, $title, $callback, $page, $section, $args
			add_settings_field($opt_id, $opt_title, 'fill_option', 'primer_page', $g_opt['section_id']);
		}
	}
}

/**
 * Заполняем опции
 */
function fill_option()
{
	foreach ($g_opt['options'] as $opt_id => $opt_title) {
	$val = $val ? $val[$opt_id] : null;
	?>
	<input type="text" name="option_name[<?php echo esc_attr($opt_id) ?>]" value="<?php echo esc_attr($opt_id) ?>" />

	<?php
	}
}
  • Вопрос задан
  • 26 просмотров
Решения вопроса 1
dikey58
@dikey58 Автор вопроса
Самоучка - web-разработчик
Разобрался. Оказывается можно добавлять аргументы в add_settings_filed() последним параметром, которые передаются в функцию. В моем случае в fill_option()

То есть в моем случае это будет выглядеть так
foreach ($g_opt['options'] as $opt_id => $opt_title) {
      // параметры: $id, $title, $callback, $page, $section, $args
      add_settings_field($opt_id, $opt_title, 'fill_option', 'primer_page', $g_opt['section_id'], array('id' => $opt_it, 'title' => $opt_title)));
    }

function fill_option($args)
{
// Делаем что-то с аргументами
}

На всякий, если кто-то занубил как я.
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы