2012-05-12 2 views
3

Я прочитал несколько руководств по добавлению пользовательских стилей в редактор WYSIWYG (TinyMCE). Ни один из них, похоже, не работает в новейших версиях Wordpress. Я использую v3.3.2. instructions from the codex работает, но ограниченным образом ...Пользовательские стили для Wordpress TinyMCE

ПРИМЕЧАНИЕ: Чтобы быть на 100% ясным, я пытаюсь добавить раскрывающийся список «Стили», который автор может использовать для применения моих пользовательских стилей к тексту. (Пожалуйста, не путайте мой вопрос с тем, как стилизовать редактор самостоятельно, используя editor-style.css ...)

Мне удалось заставить код работать, но только с использованием строки с комментариями в my_mce_before_init(). Проблема с этой версией заключается в том, что она добавляет класс с общим <span>. Я пытаюсь использовать более мощную версию кода (как показано ниже), но что-то не так. Появится раскрывающийся список стилей, но он пуст. Если я нажму на него, то первый элемент говорит «Стили», но ничего не делает. Я подозреваю, что что-то случилось с моим массивом. Надеюсь, кто-то более знающий, чем я, может установить меня прямо.

Вот соответствующий код в functions.php моей теме в ...

Вот как добавить кнопку:

// Add the Style selectbox to the second row of MCE buttons 
function my_mce_buttons_2($buttons) 
{ 
    array_unshift($buttons, 'styleselect'); 
    return $buttons; 
} 
add_filter('mce_buttons_2', 'my_mce_buttons_2'); 

Вот как я добавить стили (она работает, когда я раскомментировать):

//Define the actual styles that will be in the box 
function my_mce_before_init($init_array) 
{ 
    // add classes using a ; separated values 
    //$init_array['theme_advanced_styles'] = "Section Head=section-head;Sub Section Head=sub-section-head"; 

    $temp_array['theme_advanced_styles'] = array(
     array(
      'title' => 'Section Head', 
      'block' => 'h3', 
      'classes' => 'section-head' 
     ), 
     array(
      'title' => 'Sub Section Head', 
      'block' => 'h4', 
      'classes' => 'sub-section-head' 
     )  
    ); 

    $styles_array = json_encode($temp_array['theme_advanced_styles']); 

      // THIS IS THE PROBLEM !!!! READ BELOW 
    $init_array['theme_advanced_styles'] = $styles_array; 

    return $init_array; 
} 
add_filter('tiny_mce_before_init', 'my_mce_before_init'); 

UPDATE: Я понял это (см мой ответ ниже). Прежде чем прокручивать вниз, обратите внимание на код выше, theme_advanced_styles - это неправильный ключ. Он должен быть style_formats при определении пользовательских стилей так, как я это делаю. Я подозреваю, что это распространенная ошибка.

ответ

2

AHA!

Я нашел проблему: две разные версии определения пользовательских классов должны быть добавлены к различным ключам в массиве параметров.

Эта версия ...

"Section Head=section-head;Sub Section Head=sub-section-head"; 

...должно быть значение .

Принимая во внимание эту версию ...

$style_formats = array(
array(
    'title' => 'Column', 
    'block' => 'div', 
    'classes' => 'col', 
    'wrapper' => true 
    ), 
); 

... должно быть значение 'style_formats' в настройках массива TinyMCE.

Я изменился во второй стиль, но не заметил различного ключа для массива.

+2

Не могли бы вы предоставить полный рабочий код? Я пытаюсь заставить это работать, но еще не успел. – INT

+1

Используйте мой оригинальный код из вопроса, но замените 'theme_advanced_styles' на 'style_formats'. – emersonthis

+0

FYI ... Тем, кто пытается заставить это работать - это так - трюк, не упомянутый в ответе (но в этом вопросе), состоит в том, что вы должны * * json_encode', что '$ style_formats' массив, прежде чем назначать его к настройке 'style_formats' – Ben

2

Кажется, вы используете это (удивительный) учебник: http://alisothegeek.com/2011/05/tinymce-styles-dropdown-wordpress-visual-editor/
работал большой для меня, поэтому я сравнил свой код с моим: вы, кажется, не хватает

'wrapper' => true 

в качестве четвертого параметра каждый суб-массив. Это необходимо для добавления класса в родительский элемент вашего выбора (он может расширить ваш выбор), а не создавать новый элемент вокруг вашего точного выбора, прежде чем добавлять его в класс.
Таким образом, если вы выберете часть абзаца или часть из 2-х абзацев, он выберет весь абзац (не так уверен в двух пунктах, пожалуйста, проверьте), но по крайней мере он не будет создавать встроенный элемент вокруг вашего точного выбора).

Из документации (по ссылке выше):

wrapper [optional, default = false] 
    if set to true, creates a new block-level element 
    around any selected block-level elements 

Моих настройки:

$style_formats = array(
    array(
     'title' => 'Column', 
     'block' => 'div', 
     'classes' => 'col', 
     'wrapper' => true 
    ), 
    array(
     'title' => 'Some div with a class', 
     'block' => 'div', 
     'classes' => 'some_class', 
     'wrapper' => true 
    ), 
    array(
     'title' => 'Title with other CSS', 
     'selector' => 'h3', 
     'classes' => 'other_style' 
    ), 
    array(
     'title' => 'Read more link', 
     'selector' => 'a', 
     'classes' => 'more' 
    ) 
); 

Надеется, что это работает для вас

+0

Спасибо Фелипе. Это один из первых уроков, которые я нашел, но он не работает для меня, как есть. Я попробовал как добавить свой код, так и установить его плагин, и в обоих случаях я получаю белый экран смерти, когда он активен/не комментируется. Если вы посмотрите на приведенные ниже комментарии, похоже, я не единственный. Какую версию Wordpress вы используете? – emersonthis

+0

I jus дважды проверил его, и он все еще не работает, даже с '' wrapper '=> true'. Чтобы быть в безопасности, я вернулся к (прокомментированной) версии, которая определяет параметры как строку, и она все еще работает ... (но добавив '' все вокруг). Таким образом, это означает, что ДОЛЖНО быть чем-то не так с тем, как я объявляю классы в моем массиве. Неудача заключается в том, что я не могу найти документацию по этой альтернативе. Документация TinyMCE (http://www.tinymce.com/wiki.php/Configuration:theme_advanced_styles) практически не существует и вообще не упоминает эту альтернативу. – emersonthis

+0

... Я только заметил, что было другое отличие, которое мы переглядели (см. Мой ответ). Большое спасибо за вашу помощь. – emersonthis

Смежные вопросы