มีวิธีการรับจำนวนบรรณาธิการ WYSIWYG ในประเภทโพสต์ที่กำหนดเองหรือไม่?


27

มีวิธีที่จะมีบรรณาธิการ WYSIWYG หลายประเภทโพสต์ที่กำหนดเอง? ตัวอย่างเช่นถ้าฉันมีเลย์เอาต์ 2 คอลัมน์ฉันต้องการให้มีหนึ่งเอดิเตอร์สำหรับหนึ่งคอลัมน์และอีกเอดิเตอร์สำหรับอีกอัน


คุณต้องการการกำหนดค่า WYSIWYG ประเภทใด เต็มแผงรวม กำลังอัพโหลดรูปภาพโหมดเต็มหน้าจอเป็นต้น
hakre

คำถามที่เกี่ยวข้อง: wordpress.stackexchange.com/questions/53/…
hakre

Bueltge มีบทความที่ดีที่แสดงให้เห็นว่าสามารถทำได้: wpengineer.com/1991/example-how-to-add-meta-boxes-to-edit-area
hakre

ฉันต้องการคำตอบที่ตรงกับคำถามของโครงการลูกค้า ขอบคุณที่ถาม!
MikeSchinkel

MikeSchinkel - ฉันใหม่กับ WordPress; ฉันจะใส่รหัสที่คุณโพสต์ได้ที่ไหน

คำตอบ:


21

สมมติว่ามีการเรียกประเภทโพสต์ที่กำหนดเองของ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 เข้ากับ textarea เรายังต้องกำหนด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 จะซ้อนอยู่ภายใน Metabox ซึ่งอาจไม่เหมาะและจะไม่มีคุณสมบัติความสามารถในการสลับระหว่างโหมดการแก้ไข HTML และ Visual รวมถึงคำสั่งการแทรกสื่อที่ตัวแก้ไขการโพสต์ปกติมี การสลับโหมดดูเหมือนจะถูกกำหนดเป็นฟังก์ชันที่อาร์กิวเมนต์แรกคือ ID แต่ก็ยังปรากฏว่ามีการให้รหัสในสคริปต์ wp-tinymce เป็นไปได้ที่จะใช้ฟังก์ชั่น tinyMCE ในตัว แต่สิ่งนี้จะเปลี่ยน textarea ระหว่าง tinyMCE แบบเต็มและ textarea พื้นฐานโดยไม่มีปุ่มแทรก HTML HTML ใด ๆ


"Meta_boxen"? ! น่ากลัว ฉันคิดว่าฉันเป็นคนเดียว เดี๋ยวจะลองแก้ปัญหาดูสักพัก
mfields

วิธีแก้ปัญหา Thomas McDonalds ไม่ทำงานสำหรับฉันใน 3.1 - มีวิธีใน 3.1 ในการทำเช่นนี้หรือไม่?

19

ครั้งแรก: ขอบคุณมากสำหรับ@Thomas McDonaldสำหรับคำตอบของเขา ; ฉันต้องคิดคำถามเดียวกันกับที่@Paul Sheldrakeถามและรหัสของ Thomas ทำให้ฉันเริ่มต้นในทิศทางที่ถูกต้อง

น่าเสียดายที่ฉันติดขัดเพราะฉันต้องการเปลี่ยนเค้าโครงจากค่าเริ่มต้นเป็นเค้าโครงที่เรียบง่ายและเล็กลงเนื่องจากฉันต้องการใช้ TinyMCE ในด้านข้าง ผมมองในทางปฏิบัติทุกที่สำหรับการแก้ปัญหาและโดยเฉพาะอย่างยิ่งใน MoxieCode TinyMCE วิกิพีเดียและTinyMCE เคล็ดลับและวิธีการฟอรั่มและพบว่าไม่มีอะไร! 1ทุกอย่างที่ฉันพบอธิบายวิธีการตั้งค่าtheme, width, heightฯลฯ โดยใช้แต่เห็นได้ชัดว่าคุณไม่สามารถใช้ว่าเมื่อคุณใช้tinyMCE.init({...})tinyMCE.execCommand("mceAddControl")

ฉันกำลังนิ่งงันเมื่อฉันวิ่งข้ามบทความหลายอินสแตนซ์ TinyMCE 3 ในหน้าเดียวโดยแฮมิลตัน Chuaและเขาตอกมัน! วิธีแก้ปัญหาของเขาคือมอบหมายtinyMCE.settingsก่อนโทร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 ที่สองต่อไปนี้ในรูปแบบ / โครงร่างที่ลูกค้าของฉันต้องการ:

TinyMCE TextAreas หลายตัวใน WordPress Admin Admin 3.0
(ที่มา: mikeschinkel.com )

ดังนั้นหากคุณใช้รหัส@Thomas McDonaldด้านบนคุณจะพบว่าคุณจำเป็นต้องแก้ไขเลย์เอาต์ให้แน่ใจว่าได้อ่านบทความที่น่าสนใจของ Hamilton Chua (ขอบคุณ Ham!) :

ป.ล.ถ้าคุณทำอะไรผิดพลาดเล็กน้อย TinyMCE อาจไม่แสดงเลย ยกตัวอย่างเช่นในกรณีของฉันฉันจะใช้ในครั้งแรกและฉันก็ไม่มีอะไรและเอาฉันชั่วโมงกว่าจะรู้ว่าฉันเพียงต้องการที่จะใช้theme: "simple" theme: "advanced"ดังนั้นหากคุณพบว่า TinyMCE ใช้งานไม่ได้คุณต้องลองเปลี่ยนสิ่งต่าง ๆ รอบตัวคุณอาจพบปัญหาคล้ายกัน (BTW ฉันไม่ได้ลองชุดรูปแบบอื่น ๆ หรือสำรวจสิ่งอื่นที่มีอยู่ถ้าคุณพบชุดรูปแบบอื่น ๆ ที่ใช้งานได้โปรดแจ้งความคิดเห็นด้านล่าง)

เชิงอรรถ

1 : น่าผิดหวังมาก! หลังจากใช้เวลาน้อยกว่าหนึ่งเดือนด้วยคำตอบ WordPress ตอนนี้ฉันคาดว่าจะพบคำตอบสำหรับคำถามทั้งหมดของฉันในระดับคุณภาพเดียวกันกับที่นี่และที่อื่น ๆ ฉันมักจะพบกับความผิดหวัง!


ไมค์คุณจะหายไปเท่ากับ$scriptและไม่มีการปิดสำหรับ heredoc ของคุณเช่น EOT;. นอกเหนือจากข้อผิดพลาดเล็ก ๆ แล้วมันก็เป็นตัวอย่างที่ดีในการทำงาน .. ;)
t31os

@ t31os - ขอบคุณที่แจ้งให้เราทราบ ไม่แน่ใจว่าฉันคิดถึงสิ่งเหล่านั้นได้อย่างไร ฉันมักจะทดสอบแล้วคัดลอกคำตอบของฉันจากรหัสการทำงานของฉัน ไปคิด!
MikeSchinkel

การใช้โซลูชันนี้ส่งผลให้โปรแกรมแก้ไขภาพปกติตั้งค่า SimpleLayout เช่นกันสำหรับฉันใน 3.1
mfields

@fields - คนเกียจคร้านที่ 3.1 ได้หักหลายสิ่งหลายอย่าง :-(
MikeSchinkel

ต้องการที่จะดึงดูดความสนใจของคุณไปยังบทความนี้เพราะมันอาจชี้แจงบางสิ่ง: dannyvankooten.com/450/…
marfarma

2

เนื่องจากฉันพบว่าบทความนี้เป็นผลลัพธ์ครั้งแรกใน Google ฉันแค่อยากจะแสดงความคิดเห็นว่าตอนนี้ WP มีฟังก์ชั่นในการจัดการงานประเภทนี้

ภายในadd_meta_boxฟังก์ชั่นเพิ่มรหัสต่อไปนี้ ->

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

ทุกที่ที่คุณต้องการเพิ่มตัวแก้ไข TinyMCE

อ้างอิง: wp_editor


1
คำตอบที่ควรจะเป็นมากกว่าการเชื่อมโยงธรรมดา จริง ๆ แล้วพวกเขาควรจะเป็นคำตอบแทนที่จะเป็นเส้นทางที่บางคนอาจจะหาคำตอบ โปรดช่วยป้องกันไม่ให้ลิงค์เน่าแก้ไขคำตอบของคุณและให้ข้อมูลที่จำเป็นที่ช่วยให้ OP และผู้เยี่ยมชมในภายหลังสามารถแก้ปัญหาได้
ไกเซอร์

0

เอดิเตอร์ดีฟอลต์คือ tinymce ถูกโหลดโดยฟังก์ชันใน wp-admin / include / post.php ที่เรียกว่า wp_tiny_mce (); ดูในซอร์สที่บรรทัด 1350 มีอาร์เรย์ของการตั้งค่าที่บรรทัด 1478 หนึ่งในตัวเลือกที่เห็นได้ชัดคือกำหนดตัวเลือก textarea เพื่อใช้โปรแกรมแก้ไขจาวาสคริปต์ ฉันอ่านบทความนี้โดย Keighlบนบล็อกของเขาที่ชี้ให้ฉันเห็น อ่านบทความและอาจมีวิธีโทร wp_tiny_mce () ในส่วนของผู้ดูแลระบบปลั๊กอินและนำไปใช้กับพื้นที่ข้อความที่สองที่คุณสร้าง


0

ฉันได้รับเพียงแค่เพิ่ม“ theEditor” เป็นแอตทริบิวต์ class ให้กับ 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>
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.