Створення свого контролера (поля)

Customizer дозволяє легко створювати власні поля (UI елементи). Давайте створимо підтримку поля type="range"(діапазон, повзунок, range slider). Таке поле дозволяє вибирати значення перетягуванням повзунка.

Контролери з ядра:

Базові поля:

Базові поля:

Nav Menu:

Widget:

Image:

Інші:

Для створення нового поля потрібно створити клас на основі WP_Customize_Control :

<?php

if( class_exists( 'WP_Customize_Control' ) ) {

	class WP_Customize_Range extends WP_Customize_Control {

		public $type = 'range';

		public function __construct( $manager, $id, $args = array() ) {

			parent::__construct( $manager, $id, $args );

			$defaults = [
				'min' => 0,
				'max' => 10,
				'step' => 1
			];

			$ args = wp_parse_args ($ args, $ defaults);

			$this->min = $args['min'];
			$this->max = $args['max'];
			$this->step = $args['step'];
		}

		public function render_content(){
			?>
			<label>
				<span class="customize-control-title"><?php echo esc_html( $this->label ); ?></span>

				<input class="range-slider"
					   min="<?php echo $this->min ?>"
					   max="<?php echo $this->max ?>"
					   step="<?php echo $this->step ?>"
					   type="range"
					<?php $this->link(); ?>
					   value="<?php echo esc_attr( $this->value() ); ?>"
					   oninput="jQuery(this).next('input').val( jQuery(this).val() )">

				<input type="text" value="<?php echo esc_attr( $this->value() ); ?>" onKeyUp="jQuery(this).prev('input').val( jQuery(this). val() )">

			</label>
			<?php
		}
	}

}

Розширюємо базовий клас WP_Customize_Control . Оголошуємо в ньому властивість $typeта метод render_content(). У методі потрібно вивести HTML-елемент (поле форми), в якому потрібно використовувати методи:

  • $this->value() – поточне значення поля.
  • $this->link() – атрибут name поля.

min, max, step— це довільно створені властивості, які можна використовувати у класі.

Використання

Тепер приклад того, як використовувати наш новий контролер для створення нового поля.

add_action( 'customize_register', 'my_customize_register');

function my_customize_register( WP_Customize_Manager $wp_customize ){

	$section = 'section_id';
	$wp_customize->add_section( $section, [
		'title' => 'My Settings',
		'priority' => 220, // at the bottom of customizer
		//'panel' => $panel,
	]);

	$wp_customize->add_setting( 'my_range' , array(
		'default' => 0,
		'transport' => 'postMessage',
	)));

	$wp_customize->add_control( new WP_Customize_Range( $wp_customize, 'my_range', [
		'label' => 'Мій Рендж',
		'min' => 10,
		'max' => 9999,
		'step' => 10,
		'section' => 'section_id',
	])));

}

Зверніть увагу, що секція ‘section_id’ має бути створена. Як це робити дивіться тут .

Живий перегляд

Все, що потрібно зробити для підтримки live preview, це оновити поле в HTML новим значенням JavaScript.

wp.customize( 'my_range', function( value ) {
	value.bind( function( newval ) {
		$('#my_range span').html(newval);
	} );
} );

У результаті в нас вийде щось подібне:

Залишити відповідь

Ваша e-mail адреса не оприлюднюватиметься. Обов’язкові поля позначені *