Создание экземпляра wp_editor с пользовательскими кнопками tinyMCE
Есть ли способ определить wp_editor()
с пользовательскими кнопками tinyMCE?
Я заметил, что в справочнике функции wp_editor упоминается, что одним из аргументов $settings
может быть tinymce (array) (необязательно) Загрузка TinyMCE, может использоваться для прямой передачи настроек в TinyMCE с помощью массива()
.
На моей странице используется несколько разных экземпляров, и я хотел бы добавить определенные кнопки к определенным экземплярам.
Например,
Экземпляр #1 : Стандартные кнопки
Экземпляр #2 : жирный, курсив, маркированный список + (пользовательские) pH, температура
Экземпляр #3 : жирный, курсив, маркированный список + (пользовательские) мин_размер, макс_размер
Кто-нибудь знает, как это сделать, если я уже зарегистрировал кнопки как плагины tinyMCE согласно этому руководству?
РЕДАКТИРОВАТЬ
Вот код, который я использую в своем файле плагина, чтобы это заработало:
function add_SF_buttons() {
if ( ! current_user_can('edit_posts') && ! current_user_can('edit_pages') )
return;
if ( get_user_option('rich_editing') == 'true') {
add_filter('mce_external_plugins', 'add_SF_buttons_plugins');
}
}
function add_SF_buttons_plugins($plugin_array) {
$plugin_array['pH'] = $this->plugin_url . '/js/tinymce_buttons/pH.js';
$plugin_array['pH_min'] = $this->plugin_url . '/js/tinymce_buttons/pH_min.js';
$plugin_array['pH_max'] = $this->plugin_url . '/js/tinymce_buttons/pH_max.js';
return $plugin_array;
}
-
if (isset($SpeciesProfile)) {
add_action( 'init' , array (&$SpeciesProfile, 'register_species' ));
add_action( 'init' , array( &$SpeciesProfile, 'register_species_taxonomies' ));
add_action( 'init', array (&$SpeciesProfile, 'add_SF_buttons' ));
}
-
<?php wp_editor( $distribution, 'distribution', array( 'theme_advanced_buttons1' => 'bold, italic, ul, pH, pH_min', "media_buttons" => false, "textarea_rows" => 8, "tabindex" => 4 ) ); ?>
К сожалению, это не работает - вышеуказанный редактор просто отображает те же кнопки, что и все остальные экземпляры на странице.
Заранее спасибо,
Вы практически разобрались, согласно описанию.
Вот что вам может понадобиться для экземпляров 2 и 3 (для экземпляра 1 вы можете оставить настройки пустыми, чтобы получить стандартный набор кнопок):
Экземпляр 2:
wp_editor(
$distribution,
'distribution',
array(
'media_buttons' => false,
'textarea_rows' => 8,
'tabindex' => 4,
'tinymce' => array(
'theme_advanced_buttons1' => 'bold, italic, ul, pH, temp',
),
)
);
Экземпляр 3 (показывает каждую из 4 строк, которые можно установить для TinyMCE):
wp_editor(
$distribution,
'distribution',
array(
'media_buttons' => false,
'textarea_rows' => 8,
'tabindex' => 4,
'tinymce' => array(
'theme_advanced_buttons1' => 'bold, italic, ul, min_size, max_size',
'theme_advanced_buttons2' => '',
'theme_advanced_buttons3' => '',
'theme_advanced_buttons4' => '',
),
)
);
Я рекомендую вам изучить файл wp-includes/class-wp-editor.php
(в частности, функцию editor_settings
на строке 126), чтобы понять, как WordPress обрабатывает настройки, которые вы используете внутри функции wp_editor(). Также посмотрите эту страницу, чтобы лучше понять функциональность TinyMCE и его параметров инициализации (которые, как я полагаю, WordPress поддерживает не полностью).

Привет. Спасибо за ответ. Я добавил немного кода в свой оригинальный пост, который, судя по вашему ответу, должен работать — но не работает. Не могли бы вы взглянуть?

Я забыл обернуть параметры, специфичные для tinymce, в отдельный массив. Я отредактировал ответ и добавил другие параметры, которые вы указали в своем вопросе. Дайте знать, как дела?

Также учтите, что другие (включая меня!) хотели бы знать, как это сделать самостоятельно, поэтому постарайтесь не сводить ответ к чему-то специфичному только для dunc. Не могли бы вы добавить ссылки на соответствующую документацию WP/TinyMCE?

Отлично, это, кажется, работает. К сожалению, мои кнопки не работают, но это уже другой вопрос :) Спасибо, tbuteler.

Пожалуйста! @TomJNowell, я добавил последний абзац с рекомендуемыми материалами для чтения, спасибо за предложение!

Чуть не забыл наградить тебя наградой :) Новый вопрос здесь, если у тебя есть идеи: http://wordpress.stackexchange.com/questions/48782/registering-custom-tinymce-buttons-for-admin-area-to-work-with-custom-instance

Вы можете задавать параметры через массив в функции wp_editor(); пример:
$settings = array(
'tinymce' => array(
'setup' => 'function (ed) {
tinymce.documentBaseURL = "' . get_admin_url() . '";
}',
),
'quicktags' => TRUE,
'editor_class' => 'frontend-article-editor',
'textarea_rows' => 25,
'media_buttons' => TRUE,
);
wp_editor( $content, 'article_content', $settings );
Вы можете устанавливать значения через массив в параметре 'tinymce',
'tinymce' => true, // загружает TinyMCE, можно использовать для передачи настроек напрямую в TinyMCE с помощью массива()
Также можно получить параметры кнопок:
theme_advanced_buttons1
, theme_advanced_buttons2
, theme_advanced_buttons3
, theme_advanced_buttons4
array( 'theme_advanced_buttons1' => 'bold, italic, ul, pH, temp' )
также можно использовать фильтр для создания пользовательских кнопок, пример:
function fb_change_mce_options($initArray) {
// Строка с перечислением расширенных тегов через запятую
// Строка с перечислением расширенных элементов через запятую
$ext = 'pre[id|name|class|style],iframe[align|longdesc|name|width|height|frameborder|scrolling|marginheight|marginwidth|src]';
if ( isset( $initArray['extended_valid_elements'] ) ) {
$initArray['extended_valid_elements'] .= ',' . $ext;
} else {
$initArray['extended_valid_elements'] = $ext;
}
// возможно; установить параметр TinyMCE verify_html
//$initArray['verify_html'] = false;
return $initArray;
}
add_filter( 'tiny_mce_before_init', 'fb_change_mce_options' );
также можно фильтровать кнопки напрямую; каждая строка имеет свой фильтр:
mce_buttons
, mce_buttons_2
, mce_buttons_3
, mce_buttons_4
следующие параметры являются стандартными для примера с хуком: tiny_mce_before_init
'mode' => 'specific_textareas'
'editor_selector' => 'theEditor'
'width' => '100%'
'theme' => 'advanced'
'skin' => 'wp_theme'
'theme_advanced_buttons1' => 'bold,italic,strikethrough,|,bullist,numlist,blockquote,|,justifyleft,justifycenter,justifyright,|,link,unlink,wp_more,|,spellchecker,fullscreen,wp_adv'
'theme_advanced_buttons2' => 'formatselect,underline,justifyfull,forecolor,|,pastetext,pasteword,removeformat,|,media,charmap,|,outdent,indent,|,undo,redo,wp_help'
'theme_advanced_buttons3' => ''
'theme_advanced_buttons4' => ''
'language' => 'de'
'spellchecker_languages' => 'English=en,Danish=da,Dutch=nl,Finnish=fi,French=fr,+German=de,Italian=it,Polish=pl,Portuguese=pt,Spanish=es,Swedish=sv'
'theme_advanced_toolbar_location' => 'top'
'theme_advanced_toolbar_align' => 'left'
'theme_advanced_statusbar_location' => 'bottom'
'theme_advanced_resizing' => true
'theme_advanced_resize_horizontal' => false
'dialog_type' => 'modal'
'relative_urls' => false
'remove_script_host' => false
'convert_urls' => false
'apply_source_formatting' => false
'remove_linebreaks' => true
'gecko_spellcheck' => true
'entities' => '38,amp,60,lt,62,gt'
'accessibility_focus' => true
'tabfocus_elements' => 'major-publishing-actions'
'media_strict' => false
'paste_remove_styles' => true
'paste_remove_spans' => true
'paste_strip_class_attributes' => 'all'
'wpeditimage_disable_captions' => false
'plugins' => 'safari,inlinepopups,spellchecker,paste,wordpress,media,fullscreen,wpeditimage,wpgallery,tabfocus'
подробнее об этом фильтре можно узнать по этой ссылке.

Просто обновляю информацию, так как мне пришлось копаться в исходных файлах WordPress.
$settings = array(
'tinymce' => array(
'toolbar1' => 'bold, italic',
'toolbar2' => '',
),
'wpautop' => false,
'media_buttons' => false,
);
Думаю, это изменилось с выходом TinyMCE 4.

$args = array(
'tinymce' => array(
'toolbar1' => 'жирный,курсив,подчеркивание,разделитель,выровнять_влево,выровнять_по_центру,выровнять_вправо,разделитель,ссылка,удалить_ссылку,отменить,повторить',
'toolbar2' => '',
'toolbar3' => '',
),
);
wp_editor( $content, $editor_id, $args );
