มีวิธีที่จะมีบรรณาธิการ WYSIWYG หลายประเภทโพสต์ที่กำหนดเอง? ตัวอย่างเช่นถ้าฉันมีเลย์เอาต์ 2 คอลัมน์ฉันต้องการให้มีหนึ่งเอดิเตอร์สำหรับหนึ่งคอลัมน์และอีกเอดิเตอร์สำหรับอีกอัน
มีวิธีที่จะมีบรรณาธิการ WYSIWYG หลายประเภทโพสต์ที่กำหนดเอง? ตัวอย่างเช่นถ้าฉันมีเลย์เอาต์ 2 คอลัมน์ฉันต้องการให้มีหนึ่งเอดิเตอร์สำหรับหนึ่งคอลัมน์และอีกเอดิเตอร์สำหรับอีกอัน
คำตอบ:
สมมติว่ามีการเรียกประเภทโพสต์ที่กำหนดเองของ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 ใด ๆ
ครั้งแรก: ขอบคุณมากสำหรับ@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 ที่สองต่อไปนี้ในรูปแบบ / โครงร่างที่ลูกค้าของฉันต้องการ:
(ที่มา: mikeschinkel.com )
ดังนั้นหากคุณใช้รหัส@Thomas McDonaldด้านบนคุณจะพบว่าคุณจำเป็นต้องแก้ไขเลย์เอาต์ให้แน่ใจว่าได้อ่านบทความที่น่าสนใจของ Hamilton Chua (ขอบคุณ Ham!) :
ป.ล.ถ้าคุณทำอะไรผิดพลาดเล็กน้อย TinyMCE อาจไม่แสดงเลย ยกตัวอย่างเช่นในกรณีของฉันฉันจะใช้ในครั้งแรกและฉันก็ไม่มีอะไรและเอาฉันชั่วโมงกว่าจะรู้ว่าฉันเพียงต้องการที่จะใช้theme: "simple"
theme: "advanced"
ดังนั้นหากคุณพบว่า TinyMCE ใช้งานไม่ได้คุณต้องลองเปลี่ยนสิ่งต่าง ๆ รอบตัวคุณอาจพบปัญหาคล้ายกัน (BTW ฉันไม่ได้ลองชุดรูปแบบอื่น ๆ หรือสำรวจสิ่งอื่นที่มีอยู่ถ้าคุณพบชุดรูปแบบอื่น ๆ ที่ใช้งานได้โปรดแจ้งความคิดเห็นด้านล่าง)
1 : น่าผิดหวังมาก! หลังจากใช้เวลาน้อยกว่าหนึ่งเดือนด้วยคำตอบ WordPress ตอนนี้ฉันคาดว่าจะพบคำตอบสำหรับคำถามทั้งหมดของฉันในระดับคุณภาพเดียวกันกับที่นี่และที่อื่น ๆ ฉันมักจะพบกับความผิดหวัง!
$script
และไม่มีการปิดสำหรับ heredoc ของคุณเช่น EOT;
. นอกเหนือจากข้อผิดพลาดเล็ก ๆ แล้วมันก็เป็นตัวอย่างที่ดีในการทำงาน .. ;)
เนื่องจากฉันพบว่าบทความนี้เป็นผลลัพธ์ครั้งแรกใน Google ฉันแค่อยากจะแสดงความคิดเห็นว่าตอนนี้ WP มีฟังก์ชั่นในการจัดการงานประเภทนี้
ภายในadd_meta_box
ฟังก์ชั่นเพิ่มรหัสต่อไปนี้ ->
wp_editor( $content, $editor_id, $settings = array() );
ทุกที่ที่คุณต้องการเพิ่มตัวแก้ไข TinyMCE
อ้างอิง: wp_editor
เอดิเตอร์ดีฟอลต์คือ tinymce ถูกโหลดโดยฟังก์ชันใน wp-admin / include / post.php ที่เรียกว่า wp_tiny_mce (); ดูในซอร์สที่บรรทัด 1350 มีอาร์เรย์ของการตั้งค่าที่บรรทัด 1478 หนึ่งในตัวเลือกที่เห็นได้ชัดคือกำหนดตัวเลือก textarea เพื่อใช้โปรแกรมแก้ไขจาวาสคริปต์ ฉันอ่านบทความนี้โดย Keighlบนบล็อกของเขาที่ชี้ให้ฉันเห็น อ่านบทความและอาจมีวิธีโทร wp_tiny_mce () ในส่วนของผู้ดูแลระบบปลั๊กอินและนำไปใช้กับพื้นที่ข้อความที่สองที่คุณสร้าง
ฉันได้รับเพียงแค่เพิ่ม“ 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>