Задавайте вопросы по курсам WordPress

Тренировка работы с редактором TinyMCE – урок 32

Мне очень нравятся возможности CMS WordPress по работе с визуальным редактором TinyMCE, данные возможности были представлены для тех кто пользуется версией WP выше 3,9. Не обещаю дать вам полную информацию по API TinyMCE, но дам примеры кода который вы сможете использовать в своей работе.

Начнем наш длинный и интересный урок!

Добавляем поле выбора семейства шрифтов и размера шрифта

Для добавления элементов для работы со шрифтами и их размеров используйте код ниже.

// Enable font size & font family selects in the editor
if ( ! function_exists( 'wpex_mce_buttons' ) ) {
	function wpex_mce_buttons( $buttons ) {
		array_unshift( $buttons, 'fontselect' ); // Add Font Select
		array_unshift( $buttons, 'fontsizeselect' ); // Add Font Size Select
		return $buttons;
	}
}
add_filter( 'mce_buttons_2', 'wpex_mce_buttons' );

Вот что у нас получилось:

wordpress TinyMCE - добавляем размер текста и семейство шрифтов

wordpress TinyMCE - добавляем размер текста и семейство шрифтов

Мы можем менять mce_buttons_2 на mce_buttons_3 или mce_buttons_1, это даст возможность перемещать новые элементы межу первой, второй и третей панелью.

add_filter mce_buttons_3 перемещение элементов между панелями TinyMCE

Добавление пользовательских размеров шрифта

Настроенные по умолчанию размеры шрифта не всегда подходят для оформления текста на сайте. Еще одна проблема шрифтов по умолчанию, это то что они настраиваются в пунктах, а не пикселях, как мы к этому привыкли. Я предпочитаю использовать пиксельные значения (10px, 12px, 13px, 14px..). Ниже я даю пример функции которая изменит размеры шрифта и единицы указанные в WordPress по умолчанию.

WordPress размер шрифта по умолчанию в пунктах ptWordPress TinyMCE размер шрифта по умолчанию в пикселях px

Добавление пользовательских шрифтов

По умолчанию в движке нельзя использовать свои имена шрифтов, хотя они часто нужны. Если вы создали свой шаблон и хотите настроить выбор шрифта для пользователя, то вам понадобится следующая функция.

// Add custom Fonts to the Fonts list
if ( ! function_exists( 'wpex_mce_google_fonts_array' ) ) {
	function wpex_mce_google_fonts_array( $initArray ) {
	    $initArray['font_formats'] = 'Lato=Lato;Andale Mono=andale mono,times;Arial=arial,helvetica,sans-serif;Arial Black=arial black,avant garde;Book Antiqua=book antiqua,palatino;Comic Sans MS=comic sans ms,sans-serif;Courier New=courier new,courier;Georgia=georgia,palatino;Helvetica=helvetica;Impact=impact,chicago;Symbol=symbol;Tahoma=tahoma,arial,helvetica,sans-serif;Terminal=terminal,monaco;Times New Roman=times new roman,times;Trebuchet MS=trebuchet ms,geneva;Verdana=verdana,geneva;Webdings=webdings;Wingdings=wingdings,zapf dingbats';
            return $initArray;
	}
}
add_filter( 'tiny_mce_before_init', 'wpex_mce_google_fonts_array' );

Новый шрифт в TinyMCE

Так как некоторых шрифтов может не оказаться на компьютере пользователя, нам нужно не только предоставить выбор этих шрифтов, но и подключить их в WordPress? чтобы они корректно отображались в админке. Например можно подключить шрифт Lato который я использую выше.

if ( ! function_exists( 'wpex_mce_google_fonts_styles' ) ) {
	function wpex_mce_google_fonts_styles() {
	   $font_url = 'https://fonts.googleapis.com/css?family=Lato:300,400,700';
           add_editor_style( str_replace( ',', '%2C', $font_url ) );
	}
}
add_action( 'init', 'wpex_mce_google_fonts_styles' );

Новое и более удобное многоуровневое меню форматы

Если вы еще не пользовались данной функцией, то советую попробовать ее в действии, а результатом данной функции будет меню показанное на картинке ниже.

меню форматы в редакторе pwВключаем меню форматы в wp

 

Добавляем новые пункты в выпадающем меню

Добавить новые пункты в меню очень просто и первое что необходимо знать это надстройку которую мы будем использовать в коде который будет ниже $settings[‘style_formats_merge’] = true; эта надстройка поможет не создавать отдельное меню, но дополнить уже существующее меню форматы.

// Add new styles to the TinyMCE "formats" menu dropdown
if ( ! function_exists( 'wpex_styles_dropdown' ) ) {
	function wpex_styles_dropdown( $settings ) {

		// Create array of new styles
		$new_styles = array(
			array(
				'title'	=> __( 'Custom Styles', 'wpex' ),
				'items'	=> array(
					array(
						'title'		=> __('Theme Button','wpex'),
						'selector'	=> 'a',
						'classes'	=> 'theme-button'
					),
					array(
						'title'		=> __('Highlight','wpex'),
						'inline'	=> 'span',
						'classes'	=> 'text-highlight',
					),
				),
			),
		);

		// Merge old & new styles
		$settings['style_formats_merge'] = true;

		// Add new styles
		$settings['style_formats'] = json_encode( $new_styles );

		// Return New Settings
		return $settings;

	}
}
add_filter( 'tiny_mce_before_init', 'wpex_styles_dropdown' );

Добавление нового подменю в wordpress

Под номером (2) есть активный пункт который заключает выделенный текст в тег span с классом text-highlight.

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

wordpress работа с выпадающим меню MCE

Создание кнопки в редакторе TinyMCE

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

  1. Код для объявления нового плагина в functions.php.
  2. Скрипт JS для добавления кнопки в редактор;

Первый скрипт будет тесно связан с файлом JS. Итак давайте я представлю вам 2 кода:

Добавляем скрипт в файл functions.php

// Hooks your functions into the correct filters
function my_add_mce_button() {
	// check user permissions
	if ( !current_user_can( 'edit_posts' ) && !current_user_can( 'edit_pages' ) ) {
		return;
	}
	// check if WYSIWYG is enabled
	if ( 'true' == get_user_option( 'rich_editing' ) ) {
		add_filter( 'mce_external_plugins', 'my_add_tinymce_plugin' );
		add_filter( 'mce_buttons', 'my_register_mce_button' );
	}
}
add_action('admin_head', 'my_add_mce_button');

// Declare script for new button
function my_add_tinymce_plugin( $plugin_array ) {
	$plugin_array['my_mce_button'] = get_template_directory_uri() .'/js/mce-button.js';
	return $plugin_array;
}

// Register new button in the editor
function my_register_mce_button( $buttons ) {
	array_push( $buttons, 'my_mce_button' );
	return $buttons;
}

Добавляем javascript по адресу /wp-content/themes/intrepidity/js/mce-button.js

(function() {
	tinymce.PluginManager.add('my_mce_button', function( editor, url ) {
		editor.addButton('my_mce_button', {
			text: 'New Button',
			icon: false,
			onclick: function() {
				editor.insertContent('wp-admin.com.ua - уроки wordpress!');
			}
		});
	});
})();

Кнопка создана и вставляет текст.

Кнопка вставляет текст или шорткод

Единственный минус такой кнопочки в том что она занимает много места в редакторе, поэтому я предлагаю сделать кнопочку с иконкой.

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

function my_shortcodes_mce_css() {
	wp_enqueue_style('symple_shortcodes-tc', get_bloginfo('template_url').'/css/my-mce-style.css' );
}
add_action( 'admin_enqueue_scripts', 'my_shortcodes_mce_css' );

Если стили надо грузить из плагина, можно использовать следующий код:

function my_shortcodes_mce_css() {
	wp_enqueue_style('symple_shortcodes-tc', plugins_url('/css/my-mce-style.css', __FILE__) );
}
add_action( 'admin_enqueue_scripts', 'my_shortcodes_mce_css' );

Создайте папку images в папке темы, если ее там еще нет. В созданную папку добавьте иконку с названием check.png.

Далее добавляем стиль для будущей иконки в файл css/my-mce-style.css.

i.mce-i-my-mce-icon {
	background-image: url('../images/check.png');
}

Переработайте ранее созданный скрипт в папке js/mce-button.js, закомментируйте надпись для кнопки text: ‘New Button’ и icon: false.

Добавьте новый параметр icon: ‘mce-i-my-mce-icon’, который добавит к новой кнопке созданный ранее класс в файле стилей панели администратора.

Если все сделано правильно, то у вас появится кнопка с иконкой, которая при нажатии будет добавлять надпись.

wordpress MCE добавление кнопки с иконкой

Добавление кнопку в редактор с подменю

Мы с вами создали кнопку с иконкой, но при необходимости создать сложный функционал шаблона и множество кнопок этот способ будет затруднительным. К тому же неудобно работать когда много кнопок на панели. Сейчас мы с вами постараемся разобраться в вопросе «как добавить больше свободного места на панели редактора?». Измените код кнопки в файле js/mce-button.js на тот который видите ниже.

(function() {
	tinymce.PluginManager.add('my_mce_button', function( editor, url ) {
		editor.addButton('my_mce_button', {
			/*text: 'New Button',
			icon: false,*/
			icon: 'my-mce-icon',
			type: 'menubutton',
			menu: [
				{
					text: 'Item 1',
					menu: [
						{
							text: 'Sub Item 1',
							onclick: function() {
								editor.insertContent('wp-admin.com.ua - уроки wordpress!');
							}
						},
						{
							text: 'Sub Item 2',
							onclick: function() {
								editor.insertContent('wp-admin.com.ua - уроки wordpress!');
							}
						}
					]
				},
				{
					text: 'Item 2',
					menu: [
						{
							text: 'Sub Item 1',
							onclick: function() {
								editor.insertContent('wp-admin.com.ua - уроки wordpress!!');
							}
						},
						{
							text: 'Sub Item 2',
							onclick: function() {
								editor.insertContent('wp-admin.com.ua - уроки wordpress!');
							}
						}
					]
				}
			]
		});
	});
})();

Если вы внимательно всмотритесь в структуру кода, то поймете что в нем нет ничего сложного и переработать его не составит большого труда. Вот результат который мы получим:

tinymce editor dropdown menu wordpress

Если вы до этого сделали все правильно, то увидите что при выборе одного из подпунктов меню в поле для текста появится надпись «wp-admin.com.ua — уроки wordpress!».

Чаще всего вставка текста без изменения не очень полезна, так как при вставке шорткода необходимо указывать дополнительные опции, которые будут управлять работой шорткода. Для указания опций в шорткоде можно использовать всплывающее окно, давайте разберемся вместе как его создать.

Всплывающее окно tinymce WordPress

Для создания всплывающего окна необходимо изменить код в файле js/mce-button.js на указанный ниже. Уверен если до этого вы читали внимательно и все у вас получалось, то проблем разобраться в коде ниже у вас не возникнет.

(function() {
	tinymce.PluginManager.add('my_mce_button', function( editor, url ) {
		editor.addButton('my_mce_button', {
			/*text: 'New Button',
			icon: false,*/
			icon: 'my-mce-icon',
			type: 'menubutton',
			menu: [
				{
					text: 'Item 1',
					menu: [
						{
							text: 'Sub Item 1',
							onclick: function() {
								editor.insertContent('wp-admin.com.ua - уроки wordpress!');
							}
						},
						{
							text: 'Sub Item 2',
							onclick: function() {
								editor.insertContent('wp-admin.com.ua - уроки wordpress!');
							}
						}
					]
				},
				{
					text: 'Item 2',
					menu: [
						{
							text: 'Sub Item 1',
							onclick: function() {
								editor.insertContent('wp-admin.com.ua - уроки wordpress!!');
							}
						},
						{
							text: 'Pop-Up',
							onclick: function() {
								editor.windowManager.open( {
									title: 'Вставить произвольный шорткод',
									body: [
										{
											type: 'textbox',
											name: 'textboxName',
											label: 'Text Box',
											value: '30'
										},
										{
											type: 'textbox',
											name: 'multilineName',
											label: 'Multiline Text Box',
											value: 'You can say a lot of stuff in here',
											multiline: true,
											minWidth: 300,
											minHeight: 100
										},
										{
											type: 'listbox',
											name: 'listboxName',
											label: 'List Box',
											'values': [
												{text: 'Option 1', value: '1'},
												{text: 'Option 2', value: '2'},
												{text: 'Option 3', value: '3'}
											]
										}
									],
									onsubmit: function( e ) {
										editor.insertContent( '[random_shortcode textbox="' + e.data.textboxName + '" multiline="' + e.data.multilineName + '" listbox="' + e.data.listboxName + '"]');
									}
								});
							}
						}
					]
				}
			]
		});
	});
})();

Вот что получилось в результате проделанной работы со всплывающим окном.

всплывающее окно tinymce

Выводы урока

Что дальше? Дальше все в ваших руках, вы можете сами придумать каким образом будете использовать шорткоды и панель инструментов редактора tinymce. Урок получился непростой и немного путанный но мы и не на первом уроке, пора учиться разбираться в коде, если не получится но захотите разобраться как встраивать код в вашу тему могу выделить время и провести платное занятие.

Источник идей и вдохновения к уроку:

https://www.wpexplorer.com/wordpress-tinymce-tweaks/


Купить хостинг WordPress
/* Репетитор по wordpress
Услуги репетитора онлайн. Список курсов которые я веду
  • Базовый курс по веб-дизайну;
  • Верстка сайтов;
  • Общий курс по CMS WordPress и продолжение курса по разработке шаблонов;
  • Разработка сайтов на PHP.
Подробнее читайте на странице репетитор по WordPress
*/

Николаенко Максим

Директор веб-студии ProGrafika. Занимаюсь разработкой, дизайном и продвижением веб-сайтов. Всегда рад новым читателям блога и хорошим клиентам.


Вам может также понравиться...

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Этот сайт использует Akismet для борьбы со спамом. Узнайте, как обрабатываются ваши данные комментариев.

Шаблоны для WordPress
Самый лучший хостинг в Украине
Стабильный хостинг для Drupal