Özel bir gönderi türünde N sayısı WYSIWYG editörü almanın bir yolu var mı?


27

Özel bir gönderi türü için birden çok WYSIWYG editörüne sahip olmanın bir yolu var mı? Örneğin, 2 sütun düzenine sahip olsaydım bir sütun için bir editör, bir sütun için diğer editör olmak isterdim.


Ne tür WYSIWYG yapılandırmasına ihtiyacınız var? Tam panel dahil görüntülerin yüklenmesi, tam ekran modu vb.
hakre


Bueltge, bunun nasıl yapılabileceğini gösteren güzel bir makaleye sahip: wpengineer.com/1991/example-how-to-add-meta-boxes-to-edit-area
hakre

Bir müşteri projesi için cevaplandırılan tam olarak bu soruya ihtiyacım var. Sorduğunuz için teşekkürler!
MikeSchinkel

MikeSchinkel - WordPress'te yeniyim; Gönderdiğiniz kodu nereye koyacağım?

Yanıtlar:


21

Özel gönderi türünüzün çağrıldığını söyleyin, buna Propertiesbenzer bir kod kullanarak ilave tinyMCE editörünüzü tutmak için kutuyu ekleyeceksiniz:

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-2meta kutusunun uygulayacağı kimlik, meta kutusunun sahip olacağı Second Columnbaşlık, meta kutusunun second_column_boxHTML'sini yazdıran işlev, propertiesözel yazı normaltürümüzdür, meta kutusunun konumu ve highsayfada mümkün olduğunca yüksek gösterilmesi gerektiğini belirtir. (Genellikle varsayılan tinyMCE düzenleyicisinin altında).

Ardından, bunu en temel örnek olarak alarak, tinyMCE editörünü bir textareaya eklemelisiniz. second_column_boxMeta kutusunun HTML'sini basacak olan fonksiyonumuzu tanımlamamız gerekiyor, bu yüzden bu iş için herhangi bir yer kadar iyi:

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

Nasıl aşılacağından emin olmadığım birkaç sorun var. TinyMCE editörü, ideal olmayabilecek bir meta kutunun içine yerleştirilecek ve normal post editörünün sahip olduğu medya ekleme komutlarının yanı sıra HTML ve Görsel düzenleme modları arasında geçiş yapma özelliğine sahip olmayacak. Modları değiştirmek ilk argümanın ID olduğu bir fonksiyon olarak tanımlanmış gibi görünüyor, fakat yine de wp-tinymce betiğine kodlanmış gibi görünüyor. Bunu yapmak için yerleşik tinyMCE işlevlerini kullanmak mümkündür, ancak bu, WP HTML ekleme düğmelerinin hiçbiri olmadan, tam tinyMCE ve temel bir textarea arasındaki yazıyı değiştirir.


"Meta_boxen"? Müthiş! Tek olduğumu düşünmüştüm. Size bir süre sonra bir çözüm önereceğim.
mfields

Thomas McDonalds çözümü 3.1'de benim için çalışmıyor - 3.1'de bunu yapmanın bir yolu var mı?

19

Birincisi: Büyük sayesinde hiç @Thomas McDonald için onun cevabı ; @ Paul Sheldrake’in sorduğu soruyu tam olarak bulmam gerekiyordu ve Thomas’ın kodu beni doğru yöne başlattı.

Maalesef takıldım çünkü TinyMCE'yi bir yan meta kutusunda kullanmam gerektiğinden, düzeni varsayılandan daha basit ve daha küçük bir düzene değiştirmem gerekti. Neredeyse her yerde bir çözüm aradım ve özellikle MoxieCode TinyMCE Wiki ve TinyMCE İpuçları ve Forum'a baktım ve hiçbir şey bulamadım! 1 Her şey nasıl sete açıkladı bulundu theme, width, heightkullanarak, vb tinyMCE.init({...})ama görünüşe kullandığınız o zaman kullanamaz tinyMCE.execCommand("mceAddControl").

Hamilton Chua tarafından bir sayfada birden fazla TinyMCE 3 örneği makalesine rastladığımda çok şaşırmıştım ve o çiviledi! Onun çözümü, aramadan önce atamaktı , örneğin:tinyMCE.settingstinyMCE.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;

Üzücü kısmı, bu gerçekten zor değildi, ama bulabildiğim başka hiçbir yerde belgelenmedi. Bu sorunu neredeyse hiç kimsenin yaşamadığını keşfetmek şaşırtıcı.

Her neyse, yukarıdaki kod tam olarak müşterimin ihtiyaç duyduğu biçimde / düzende aşağıdaki ikinci TinyMCE'yi üretti:

WordPress 3.0 Yönetici Düzenleyicisi'nde Birden Çok TinyMCE TextAreas
(kaynak: mikeschinkel.com )

Bu yüzden yukarıdaki @Thomas McDonald kodunu kullanıyorsanız , düzende değişiklik yapma gereği duyduğunuzu görüyorsunuz, Hamilton Chua’nın harika makalesine göz atmayı unutmayın (teşekkürler Ham!) :

PS Eğer biraz yanlış bir şey yaparsanız, TinyMCE hiç görünmeyebilir. Örneğin benim durumumdatheme: "simple"ilk başta kullanıyorum ve hiçbir şeyim yok ve sadece kullanmam gerektiğini fark etmem bir saatten fazla sürdütheme: "advanced". Eğer TinyMCE'in sizin için çalışmadığını fark ederseniz, bir şeyleri değiştirmeyi denediğinizden emin olabilirsiniz, benzer bir probleminiz olabilir. (BTW, başka temaları denemedim ya da başka nelerin mevcut olduğunu araştırmadım; işin diğer temalarını bulursanız, lütfen aşağıdaki yorumu yapınız.)

dipnot

1 : Çok sinir bozucu! WordPress Cevap ile bir aydan biraz daha uzun bir süre sonra, şimdi tüm sorularıma cevapları buradaki kalite seviyesiyle bulmayı bekliyorum ve başka yerlerde de genellikle hayal kırıklığı buluyorum!


Mike, sonra eşit bir şey eksik $scriptve ayrıca heredoc için kapanış yok, yani. EOT;. Küçük hataların dışında iyi bir çalışma örneğidir;;)
t31os

@ t31os - Bana bildirdiğiniz için teşekkür ederiz. Bunları nasıl özlediğimden emin değilim; Genelde sınava girip yanıtlarımı çalışma kodumdan kopyalarım. Git figürü!
MikeSchinkel

Bu çözümü kullanmak normal görsel editörün 3.1'de SimpleLayout'u benim için ayarlamasını sağladı.
mfields

@mfields - Bummer ki 3.1 çok şey kırdı. :-(
MikeSchinkel

Bazı şeyleri açıklığa kavuşturabileceği için, bu yazıya dikkatinizi çekmek istedi: dannyvankooten.com/450/…
marfarma

2

Bu makaleyi Google’da ilk sonuç olarak bulduğum için, WP’nin şimdi bu tür bir görevi yerine getirmek için bir işlev sunduğunu yorumlamak istedim.

İçinde add_meta_boxişlevi, aşağıdaki kodu ekleyin ->

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

TinyMCE editörünü nereye eklemek istersen

Referans: wp_editor


1
Cevaplar düz linklerden daha fazla olmalıdır . Aslında birisinin bir cevap bulabileceği bir rota yerine bir cevap olmalılar . Lütfen bağlantının bozulmasını önlemeye yardım edin, cevabınızı düzenleyin ve OP ile daha sonraki ziyaretçilerin sorunlarını çözmelerine yardımcı olacak gerekli bilgileri sağlayın.
kaiser

0

Varsayılan düzenleyici tinymce, wp-admin / include / include.php içindeki wp_tiny_mce () işlevindeki bir işlevle yüklenir; Kaynağa 1350 satırında bakın. 1478 satırında bir dizi ayar vardır. Seçeneklerden biri, javascript editörünü uygulamak için textarea seçicisini açıkça gösterir. Ben okuyordum Keighl tarafından bu yazı ona doğru beni işaret onun blog. Makaleyi okuyun ve belki de bir yönetici bölüm eklentisinde wp_tiny_mce () 'yi çağırmanın ve onu oluşturduğunuz ikinci bir metin alanına uygulamanın bir yolu vardır.


0

Ben sadece bir editöre sınıf niteliği olarak "TheEditor" u ekleyerek anladım:

<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>
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.