WordPress как на ладони
wordpress jino

Выбора цвета в WordPress: Iris Color Picker

С версии 3.5. в WordPress был измен скрипт выбора цвета с Farbtastic на Iris (Айрис). Особенность этого скрипта в том, что в его коде используется CSS3 градиенты, поэтому палитра, кроме прочих преимуществ, отлично отображается на HiDPI (Retina) экранах. В этой заметке я покажу, как подключать и использовать родной скрипт WordPress для выбора цвета  админ-панели при создании плагинов и на страницах сайта (фронт-энде). Это не сложно.

iris
Оглавление:

Подключение Color Picker в админке

Чтобы подключить выбор цвета Iris к полям формы при написании плагина, нужно выполнить 3 действия:

#1 Добавить стили и скрипты wp-color-picker

Используя событие admin_enqueue_scripts, нужно подключить скрипт и стили "wp-color-picker". Также тут подключим свой js файл:

/* Подключаем Iris Color Picker 
----------------------------------------------------------------- */
function add_admin_iris_scripts( $hook ){
	// подключаем IRIS
	wp_enqueue_script( 'wp-color-picker' );
	wp_enqueue_style( 'wp-color-picker' );

	// подключаем свой файл скрипта
	wp_enqueue_script('plugin-script', plugins_url('js/plugin-script.js', __FILE__), array('wp-color-picker'), false, 1 );
}
add_action( 'admin_enqueue_scripts', 'add_admin_iris_scripts' );

#2 Добавить поля формы

Далее, на странице настроек плагина, в форме, используем такие поля ввода для цвета:

<input name="color1" type="text" value="" />
<input name="color2" type="text" value="#f19" />

Если указать значение поля (атрибут value), то Iris возьмет это значение в качестве цвета по умолчанию.

#3 Подключить Iris к полям формы

Далее мы должны создать файл JS, который подключается в первом пункте. Свой файл скрипта будет иметь такой код:

jQuery(document).ready(function($){
	$('input[name*="color"]').wpColorPicker();
});

В этом файле мы подключаем Iris ко всем полям формы, в значении атрибута name которых есть строка color: name="color1", name="my_color".

к началу

Настройки метода wpColorPicker()

Метод wpColorPicker() может принимать параметры, с помощью которых можно настроить выбора цвета. Например, если нужно во время выбора цвета производить какие-то действия. Вот список всех параметров, которые может принимать функция:

var myOptions = {
	// устанавливает цвет по умолчанию, также цвет по умолчанию
	// берется из атрибута value у input. Значение input приоритетнее
	defaultColor: false,

	// функция обратного вызова, срабатывающая каждый раз 
	// при выборе цвета (когда водите мышкой по палитре)
	change: function(event, ui){ },

	// функция обратного вызова, срабатывающая при очистке (сбросе) цвета
	clear: function(){ },

	// спрятать ли выбор цвета при загрузке (палитра будет появляться при клике)
	hide: false,

	// показывать ли группу стандартных цветов внизу палитры
	// можно добавить свои цвета указав их в массиве: 
	// ['#125', '#459', '#78b', '#ab0', '#de3', '#f0f']
	palettes: true

};

$('.iris_color').wpColorPicker( myOptions );

wpColorPicker() - это обертка WordPress для основного скрипта Iris. Обертка нужна для того, чтобы если в будущем появится скрипт получше, его легко можно было заменить. Однако, если вам нужны какие-либо дополнительные настройки, просто используйте метод iris() вместо wpColorPicker()  и у вас появится возможность использовать все настройки iris.

к началу

Демо плагин

Чтобы наглядно показать первые три пункта, я написал небольшой плагин, который добавляет страницу настроек в админ-панель. На странице всего одно поле - выбор цвета. Вот что получается в результате работы плагина:

Демонстрация подключения выбора цвета Iris

Код плагина:

<?php
/*
Plugin Name: Выбор цвета Iris
Description: Демонстрация подключения Iris color picker
Version: 1.0
Author: Kama
Author URI: http://wp-kama.ru
*/

class irisDemo {
	function __construct(){
		add_action( 'admin_init', array( $this, 'init') );
		add_action( 'admin_menu', array( $this, 'add_options_page') );
		add_action( 'admin_enqueue_scripts', array( $this, 'enqueue_scripts') );
	}

	function init(){
		register_setting( 'iris_options', 'iris_options' );
	}

	function add_options_page(){
		add_options_page( 'Демонстрация Iris Color Picker', 'Демо Iris', 'manage_options', 'iris_color_pick', array( $this, 'options') );
	}

	/**
	 * Страница настроек
	 */
	function options(){
		?>
		<div class="wrap">
			<h2><?php echo get_admin_page_title() ?></h2>
			<form method="post" action="options.php">
	<?php settings_fields( 'iris_options' ); ?>
	<?php $options = get_option( 'iris_options' );?>
	<p>
	<input class="iris_color" name="iris_options[link_color]" id="link-color" type="text" value="<?php echo $options['link_color']; ?>">
	</p>
	<?php submit_button();?>
			</form>
		</div>
		<?php
	}

	/**
	 * Подгружаем стили и скрипты
	 */
	function enqueue_scripts( $hook ) {
		// Убедимся, что это страница настроек нашего плагина
		if( 'settings_page_'.'iris_color_pick' != $hook )
			return;
			wp_enqueue_style( 'wp-color-picker' );
		wp_enqueue_script( 'wp-color-picker' );
		// подключаем свой стиль
		// wp_enqueue_script( 'script_123', plugins_url( 'script.js', __FILE__ ), array( 'jquery', 'wp-color-picker' ), false, 1 );
		add_action( 'admin_footer', array( $this, 'admin_footer_script'), 99 );
	}

	/**
	 * Подключаем свой скрпит в подвал
	 */
	function admin_footer_script(){
		?>
		<script type="text/javascript">
		jQuery(document).ready(function($){
			$('.iris_color').wpColorPicker({
	// устанавливает цвет по умолчанию, также цвет по умолчанию
	// из атрибута value у input
	defaultColor: false,
	// функция обратного вызова, срабатывающая каждый раз 
	//при выборе цвета (когда водите мышкой по палитре)
	change: function(event, ui){ },
	// функция обратного вызова, срабатывающая при очистке (сбросе) цвета
	clear: function(){ },
	// спрятать ли выбор цвета при загрузке
	// палитра будет появляться при клике
	hide: false,
	// показывать ли группу стандартных цветов внизу палитры
	// можно добавить свои цвета указав их в массиве: ['#125', '#459', '#78b', '#ab0', '#de3', '#f0f']
	palettes: true
			});
		});
		</script>
		<?php
	}

}

new irisDemo();
?>
к началу

Подключение во фронт-энде

Iris Color Picker в WordPress

Чтобы использовать выбор цвета Iris во фронт-энде (в лицевой части сайта), нужно подключить все необходимые для работы скрипта jQuery расширения,  это: 'jquery-ui-draggable', 'jquery-ui-slider', 'jquery-touch-punch'.

Данное решение я нашел здесь, не уверен что это лучший способ заставить работать Iris Color Picker во фронт-энде, но этот способ работает (проверил). Для работы скрипта нужно подключить элементы jQuery UI и указать глобальную переменную js - wpColorPickerL10n:

function wpa82718_scripts() {
	wp_enqueue_style( 'wp-color-picker' );
	wp_enqueue_script(
		'iris',
		admin_url( 'js/iris.min.js' ),
		array( 'jquery-ui-draggable', 'jquery-ui-slider', 'jquery-touch-punch' ),
		false,
		1
	);
	wp_enqueue_script(
		'wp-color-picker',
		admin_url( 'js/color-picker.min.js' ),
		array( 'iris' ),
		false,
		1
	);
	$colorpicker_l10n = array(
		'clear' => __( 'Clear' ),
		'defaultString' => __( 'Default' ),
		'pick' => __( 'Select Color' ),
		'current' => __( 'Current Color' )
	);
	wp_localize_script( 'wp-color-picker', 'wpColorPickerL10n', $colorpicker_l10n ); 

}
add_action( 'wp_enqueue_scripts', 'wpa82718_scripts', 100 );
Выбора цвета в WordPress: Iris Color Picker 3 комментария
  • Александр Каратаев cайт: blog.ddw.kz @

    Тимур, спасибо за статью. Благодаря ей без проблем внедрил выбор цвета в свои плагины...

    Ответить2.5 года назад #
  • Сергей

    Большое спасибо за статью. Color Picker, благодаря вам, отлично заработал.
    Непонятно только, почему при нажатии на кнопку сброс, в окошке цвета не появляется значение цвета по умолчанию, а оно становится пустым. И для того, чтобы значения по умолчанию появились, опцию нужно сохранить. При этом, если у меня стоит проверка на неправильность цвета в поле ввода - выдается ошибка

    • Kama4485

      Потому что этот сброс - это очистка, обнуление. Чтобы вернуть цвет по умолчанию, используй функцию clear: function(){ }, см статью. В этой функции указывай нужное значение для value атрибута поля input.

Здравствуйте, !

Ваш комментарий