Wordpress - дополнительные настройки темы

Иногда, при создании темы(шаблона) для CMS Wordpress, необходимо сделать небольшую настроку, которую можно контролировать с админки.

Ну например нужно вывести в шаблоне ссылки на соц. сети


//------------------------Добавленяем настроку в тему
$true_page = 'themes-settings.php'; // это часть URL страницы, рекомендую использовать строковое значение, т.к. в данном случае не будет зависимости от того, в какой файл вы всё это вставите
/*
 * Функция, добавляющая страницу в пункт меню Настройки
 */
function true_options() {
	global $true_page;
	add_options_page( 'Настроки темы', 'Настроки темы', 'manage_options', $true_page, 'true_option_page');  
}
add_action('admin_menu', 'true_options');
/**
 * Возвратная функция (Callback)
 */ 
function true_option_page(){
	global $true_page;
	?><div class="wrap">
		<h2>Дополнительные параметры темы</h2>
		<form method="post" enctype="multipart/form-data" action="options.php">
			<?php 
			settings_fields('true_options'); // меняем под себя только здесь (название настроек)
			do_settings_sections($true_page);
			?>
			<p class="submit">  
				<input type="submit" class="button-primary" value="<?php _e('Save Changes') ?>" />  
			</p>
		</form>
	</div><?php
}
/*
 * Регистрируем настройки
 * Мои настройки будут храниться в базе под названием true_options (это также видно в предыдущей функции)
 */
function true_option_settings() {
	global $true_page;
	// Присваиваем функцию валидации ( true_validate_settings() ). Вы найдете её ниже
	register_setting( 'true_options', 'true_options', 'true_validate_settings' ); // true_options
	// Добавляем секцию
	add_settings_section( 'true_section_1', 'Настройки соц. сетей', '', $true_page );
	//------------------------- Создадим текстовое поле в первой секции
	$true_field_params = array(
		'type'      => 'text', // тип
		'id'        => 'url_facebook', //id
		'desc'      => 'Введите ссылку на facebook', // описание
		'label_for' => 'url_facebook' // позволяет сделать название настройки лейблом 
	);
	add_settings_field( 'url_field_facebook', 'facebook', 'true_option_display_settings', $true_page, 'true_section_1', $true_field_params );	
	//------------------------- Создадим текстовое поле в первой секции
	$true_field_params_1 = array(
		'type'      => 'text', // тип
		'id'        => 'url_insta', //id
		'desc'      => 'Введите ссылку на instagram', // описание
		'label_for' => 'url_insta' // позволяет сделать название настройки лейблом 
	);
	add_settings_field( 'url_field_instagram', 'instagram', 'true_option_display_settings', $true_page, 'true_section_1', $true_field_params_1 );	
	//------------------------- Создадим текстовое поле в первой секции
	$true_field_params_1 = array(
		'type'      => 'text', // тип
		'id'        => 'url_youtube', //id
		'desc'      => 'Введите ссылку на youtube', // описание
		'label_for' => 'url_youtube' // позволяет сделать название настройки лейблом 
	);
	add_settings_field( 'url_field_youtube', 'youtube', 'true_option_display_settings', $true_page, 'true_section_1', $true_field_params_1 );	
	//------------------------- Создадим текстовое поле в первой секции
	$true_field_params_1 = array(
		'type'      => 'text', // тип
		'id'        => 'url_pinterest', //id
		'desc'      => 'Введите ссылку на pinterest', // описание
		'label_for' => 'url_pinterest' // позволяет сделать название настройки лейблом 
	);
	add_settings_field( 'url_field_pinterest', 'pinterest', 'true_option_display_settings', $true_page, 'true_section_1', $true_field_params_1 );
  
}
add_action( 'admin_init', 'true_option_settings' );
 
/*
 * Функция отображения полей ввода
 * Здесь задаётся HTML и PHP, выводящий поля
 */
function true_option_display_settings($args) {
	extract( $args );
 
	$option_name = 'true_options';
 
	$o = get_option( $option_name );
 
	switch ( $type ) {  
		case 'text':  
			$o[$id] = esc_attr( stripslashes($o[$id]) );
			echo "<input class='regular-text' type='text' id='$id' name='" . $option_name . "[$id]' value='$o[$id]' />";  
			echo ($desc != '') ? "<br /><span class='description'>$desc</span>" : "";  
		break;
		case 'textarea':  
			$o[$id] = esc_attr( stripslashes($o[$id]) );
			echo "<textarea class='code large-text' cols='50' rows='10' type='text' id='$id' name='" . $option_name . "[$id]'>$o[$id]</textarea>";  
			echo ($desc != '') ? "<br /><span class='description'>$desc</span>" : "";  
		break;
		case 'checkbox':
			$checked = ($o[$id] == 'on') ? " checked='checked'" :  '';  
			echo "<label><input type='checkbox' id='$id' name='" . $option_name . "[$id]' $checked /> ";  
			echo ($desc != '') ? $desc : "";
			echo "</label>";  
		break;
		case 'select':
			echo "<select id='$id' name='" . $option_name . "[$id]'>";
			foreach($vals as $v=>$l){
				$selected = ($o[$id] == $v) ? "selected='selected'" : '';  
				echo "<option value='$v' $selected>$l</option>";
			}
			echo ($desc != '') ? $desc : "";
			echo "</select>";  
		break;
		case 'radio':
			echo "<fieldset>";
			foreach($vals as $v=>$l){
				$checked = ($o[$id] == $v) ? "checked='checked'" : '';  
				echo "<label><input type='radio' name='" . $option_name . "[$id]' value='$v' $checked />$l</label><br />";
			}
			echo "</fieldset>";  
		break; 
	}
}
 
/*
 * Функция проверки правильности вводимых полей
 */
function true_validate_settings($input) {
	foreach($input as $k => $v) {
		$valid_input[$k] = trim($v);
 
		/* Вы можете включить в эту функцию различные проверки значений, например
		if(! задаем условие ) { // если не выполняется
			$valid_input[$k] = ''; // тогда присваиваем значению пустую строку
		}
		*/
	}
	return $valid_input;
}