Есть ли способ получить N количество редакторов WYSIWYG в настраиваемом типе сообщений?

Есть ли способ иметь несколько редакторов WYSIWYG для настраиваемого типа сообщений? Например, если у меня было расположение двух столбцов, я хотел иметь один редактор для одного столбца и другой редактор для другого.

26 голосов | спросил Paul Sheldrake 17 PM00000020000005831 2010, 14:09:58

5 ответов


20

Скажите, что ваш пользовательский тип сообщения был вызван Properties, вы должны добавить этот флажок, чтобы держать ваш дополнительный редактор tinyMCE, используя код, похожий на этот:

function register_meta_boxen() {
    add_meta_box("wysiwyg-editor-2", "Second Column", "second_column_box",
    "properties", "normal", "high");    
}
add_action('admin_menu', 'register_meta_boxen');

wysiwyg-editor-2 - это идентификатор, к которому будет применен мета-поле, Second Column - это название, которое будет иметь мета-окно, second_column_box - это функция, которая будет печатать HTML-код для мета-поля, properties - наш пользовательский тип сообщения, normal - это местоположение мета-поля и high указывает, что он должен быть показан как можно больше на странице. (Обычно ниже редактора tinyMCE по умолчанию).

Затем, взяв это как самый простой пример, вы должны прикрепить редактор tinyMCE к текстовой области. Нам еще нужно определить нашу функцию second_column_box, которая будет печатать HTML для мета-поля, чтобы это было так хорошо, как любое:

function second_column_box() {
    echo <<<EOT
    <script type="text/javascript">
jQuery(document).ready(function() {
    jQuery("#tinymce").addClass("mceEditor");
    if ( typeof( tinyMCE ) == "object" &&
         typeof( tinyMCE.execCommand ) == "function" ) {
        tinyMCE.execCommand("mceAddControl", false, "tinymce");
    }
});
</script>
    <textarea id="tinymce" name="tinymce"></textarea>
EOT;
}

Есть несколько вопросов, которые я не уверен, как их преодолеть. Редактор tinyMCE будет вложен внутри метабокса, что может быть не идеальным, и не будет иметь возможности переключаться между режимами редактирования HTML и Visual, а также команды вставки носителя, которые имеет обычный редактор сообщений. Переключение режимов, как представляется, определяется как функция, первым аргументом которой является идентификатор, но все же он также кодируется в сценарий wp-tinymce. Для этого можно использовать встроенные функции tinyMCE, но это изменяет текстовое поле между полным tinyMCE и базовым текстовым полем без каких-либо кнопок вставки WP HTML.

ответил nobody 17 PM00000030000001131 2010, 15:30:11
18

Во-первых: Большое спасибо @Thomas McDonald за TinyMCE Wiki и TinyMCE Tips & Как на форуме и ничего не нашел! 1 Все, что я нашел, объясняет, как установить theme, width, height и т. д., используя tinyMCE.init({...}), но, видимо, вы не можете использовать это, когда используете tinyMCE.execCommand("mceAddControl").

Я был в тупике, когда я наткнулся на статью несколько экземпляров TinyMCE 3 на одной странице , например:

tinyMCE.settings

Печальная часть - это было действительно не сложно, но она не была документирована где-нибудь еще, что я мог найти. Удивительно, что почти никто не сталкивался с этой проблемой.

Таким образом, в любом случае приведенный выше код генерировал следующий второй TinyMCE точно в формате /макете, который нужен моему клиенту:

Множество TinyMCE TextAreas в редакторе администратора WordPress 3.0

Итак, если вы используете код @Thomas McDonald выше, вы обнаружите, что вам нужно изменить макет, обязательно посмотрите на замечательную статью Hamilton Chua (спасибо Ham!) :

P.S. Если вы что-то слегка ошибаетесь, TinyMCE может просто не отображаться вообще. Например, в моем случае я сначала использую tinyMCE.execCommand("mceAddControl"), и я ничего не получил, и мне потребовалось более часа, чтобы понять, что мне просто нужно использовать тему <?php $id = "sidebar-content"; $script = <<<EOT <script type="text/javascript"> jQuery(document).ready(function($) { $("#{$id}").addClass("mceEditor"); if ( typeof( tinyMCE ) == "object" && typeof( tinyMCE.execCommand ) == "function" ) { tinyMCE.settings = { theme : "advanced", mode : "none", language : "en", height:"200", width:"100%", theme_advanced_layout_manager : "SimpleLayout", theme_advanced_toolbar_location : "top", theme_advanced_toolbar_align : "left", theme_advanced_buttons1 : "bold,italic,underline,strikethrough,|,justifyleft,justifycenter,justifyright,justifyfull", theme_advanced_buttons2 : "", theme_advanced_buttons3 : "" }; tinyMCE.execCommand("mceAddControl", true, "{$id}"); } }); </script> <textarea id="sidebar-content" name="sidebar-content"></textarea> EOT; . Поэтому, если вы обнаружите, что TinyMCE не работает для вас, обязательно попробуйте изменить ситуацию, у вас может возникнуть аналогичная проблема. (BTW, я не пробовал никаких других тем и не изучал, что еще доступно, если вы найдете другие темы, которые работают, пожалуйста, дайте комментарий ниже.)

Сноска

1 : Очень расстраивает! Спустя немного больше месяца с ответом WordPress, я ожидаю найти ответы на все мои вопросы как на тот же уровень качества, что и здесь, и в других местах я обычно нахожу разочарование!

ответил MikeSchinkel 12 thEurope/Moscowp30Europe/Moscow09bEurope/MoscowSun, 12 Sep 2010 12:47:15 +0400 2010, 12:47:15
1

Поскольку я нашел эту статью в качестве первого результата в Google, я просто хотел прокомментировать, что WP теперь предлагает функцию для обработки такого рода задач.

В функции add_meta_box добавьте следующий код ->

wp_editor( $content, $editor_id, $settings = array() );

Если вы хотите добавить редактор TinyMCE

Ссылка: wp_editor

ответил ejhost 12 +04002014-10-12T23:49:59+04:00312014bEurope/MoscowSun, 12 Oct 2014 23:49:59 +0400 2014, 23:49:59
0

Редактор по умолчанию, tinymce, загружается функцией в wp-admin /includes /post.php, называемой wp_tiny_mce (); Посмотрите в источнике в строке 1350. Там представляет собой набор параметров в строке 1478. Один из вариантов, по-видимому, обозначает селектор textarea для применения редактора javascript. Я читал этот пост Keighl в своем блоге, который указывал я к нему. Прочитайте статью, и, возможно, есть способ вызвать wp_tiny_mce () в плагине раздела администрирования и применить ее ко второй области текста, которую вы создаете.

ответил kevtrout 17 PM00000030000005131 2010, 15:28:51
0

Я получил его, добавив «атрибут» в качестве атрибута класса в текстовое поле:

<div style="background: #FFF; border: 1px solid #CCC;"><textarea id="my_details_field" name="my_details" class="theEditor" rows="20" style="width: 100%;"><?=get_post_meta($post->ID, 'my_details', TRUE)?></textarea></div>
ответил Markus René Einicher 4 +04002011-10-04T15:55:15+04:00312011bEurope/MoscowTue, 04 Oct 2011 15:55:15 +0400 2011, 15:55:15

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132