it-swarm-eu.dev

Existuje způsob, jak získat N počet WYSIWYG editorů v typu vlastního příspěvku?

Existuje způsob, jak mít více editorů WYSIWYG pro vlastní příspěvek typu? Například, kdybych měl rozložení 2 sloupců, chtěl jsem mít jeden editor pro jeden sloupec a jiný editor pro druhého.

27
Paul Sheldrake

Řekněte, že váš vlastní typ příspěvku se nazýval Properties, přidali byste toto pole a přidali další editor tinyMCE pomocí kódu podobného tomuto:

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 je ID, které na něj bude mít meta box, Second Column je název, který bude mít meta box, second_column_box je funkce, která vytiskne HTML pro meta box, properties je náš vlastní typ příspěvku, normal je umístění meta boxu a high určuje, že by měl být zobrazen co nejvýše na stránce. (Obvykle pod výchozím editorem tinyMCE).

Poté, co to vezmete jako nejzákladnější příklad, musíte připojit editor tinyMCE k textarea. Stále musíme definovat naši funkci second_column_box, která vytiskne HTML meta box, takže je to tak dobré místo, jako to udělat:

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;
}

Existuje několik otázek, které si nejsem jistý, jak překonat. Editor tinyMCE bude vnořen do metaboxu, což nemusí být ideální, a nebude obsahovat možnost přepínat mezi režimy HTML a vizuálního editování a také příkazy pro vkládání médií, které má normální post editor. Zdá se, že přepínání režimů je definováno jako funkce, která je prvním argumentem, ale přesto se zdá, že je kódována do skriptu wp-tinymce. Je možné použít vestavěné funkce tinyMCE k tomu, ale to změní textarea mezi plným tinyMCE a základní textarea, bez některého z WP HTML vkládacích tlačítek.

20
nobody

První: Velké díky na @Thomas McDonald za jeho odpověď ; Potřeboval jsem přijít přesně na stejnou otázku, na kterou se ptal @Paul Sheldrake a Thomasův kód mě začal správným směrem.

Bohužel jsem pak uvízl, protože Potřeboval jsem změnit rozvržení z výchozího na jednodušší a menší rozložení, protože jsem potřeboval použít TinyMCE v bočním metaboxu. Díval jsem se prakticky všude na řešení a hlavně na MoxieCode TinyMCE Wiki a TinyMCE Tipy & Jak Fórum a nenalezli nic! 1 Všechno, co jsem našel, vysvětluje, jak nastavit theme, width, height, atd. Pomocí tinyMCE.init({...}), ale zřejmě to nemůžete použít, když používáte tinyMCE.execCommand("mceAddControl").

Byl jsem o pauze, když jsem běžel přes článek více instancí TinyMCE 3 na jedné stránce by Hamilton Chua , a on to přibil! Jeho řešením bylo předřadit tinyMCE.settings před voláním tinyMCE.execCommand("mceAddControl"), například:

<?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;

Smutné je, že to nebylo opravdu těžké, ale nikde jinde, co jsem mohl najít, to nebylo zdokumentováno. Je úžasné zjistit, že tento problém nezažil nikdo jiný.

Takže výše uvedený kód generoval následující druhý TinyMCE přesně ve formátu/rozložení, které můj klient potřeboval:

 Multiple TinyMCE TextAreas in the WordPress 3.0 Admin Editor 
(zdroj: mikeschinkel.com )

Takže pokud používáte kód @Thomas McDonald výše, zjistíte, že potřebujete upravit rozvržení, nezapomeňte se podívat na úžasný článek Hamiltona Chua (díky Hamovi!):

P.S.Pokud uděláte něco i mírně špatného, ​​TinyMCE se nemusí vůbec ukázat. Například v mém případě používám nejprve theme: "simple" a nic jsem nedostal a trvalo mi hodinu, než jsem si uvědomil, že jsem potřeboval použít theme: "advanced". Pokud tedy zjistíte, že TinyMCE nefunguje, určitě zkuste změnit věci, možná máte podobný problém. (BTW, nevyzkoušela jsem žádné jiné motivy ani prozkoumala, co je ještě k dispozici; pokud najdete jiné motivy, které fungují, uveďte prosím komentář níže.)

Poznámka pod čarou

1 : Velmi frustrující! Po trochu více než jeden měsíc s WordPress Odpověď jsem nyní očekává, že najít odpovědi na všechny mé otázky jako na stejné úrovni kvality jako tady, a jinde jsem obvykle najít zklamání!

18
MikeSchinkel

Vzhledem k tomu, že jsem tento článek našel jako první výsledek v Googlu, chtěl jsem jen poznamenat, že WP nyní nabízí funkci pro zpracování tohoto druhu úkolu.

V rámci funkce add_meta_box přidejte následující kód ->

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

Kdekoliv chcete přidat editor TinyMCE

Odkaz: wp_editor

1
ejhost

Dostal jsem to jen přidáním “theEditor” jako atributu třídy do textarea:

<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>
0

Výchozí editor, tinymce, je načten funkcí v wp-admin/includes/post.php s názvem wp_tiny_mce (); Podívejte se na zdroj na řádku 1350. Na řádku 1478 je řada nastavení. Jedna z možností zřejmě označuje volič textarea, aby se editor javascript aplikoval. Četl jsem tento příspěvek od Keighla na jeho blogu, který mě k tomu ukázal. Přečtěte si článek a možná existuje způsob, jak zavolat wp_tiny_mce () do pluginů pro správu a aplikovat jej na druhou textovou oblast, kterou vytvoříte.

0
kevtrout