Có cách nào để có nhiều trình soạn thảo WYSIWYG cho một loại bài đăng tùy chỉnh không? Ví dụ: nếu tôi có bố cục 2 cột, tôi muốn có một trình soạn thảo cho một cột và một trình soạn thảo khác cho cột kia.
Có cách nào để có nhiều trình soạn thảo WYSIWYG cho một loại bài đăng tùy chỉnh không? Ví dụ: nếu tôi có bố cục 2 cột, tôi muốn có một trình soạn thảo cho một cột và một trình soạn thảo khác cho cột kia.
Câu trả lời:
Giả sử loại bài đăng tùy chỉnh của bạn đã được gọi Properties
, bạn sẽ thêm hộp để giữ trình soạn thảo tinyMCE bổ sung của mình bằng mã tương tự như sau:
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
là ID mà hộp meta sẽ áp dụng cho nó, Second Column
là tiêu đề mà hộp meta sẽ có, second_column_box
là chức năng sẽ in ra HTML cho hộp meta, properties
là loại bài đăng tùy chỉnh của chúng tôi, normal
là vị trí của hộp meta và high
chỉ định rằng nó phải được hiển thị càng cao trong trang càng tốt. (Thường bên dưới trình soạn thảo tinyMCE mặc định).
Sau đó, lấy đây làm ví dụ cơ bản nhất, bạn phải đính kèm trình soạn thảo tinyMCE vào textarea. Chúng tôi vẫn phải xác định second_column_box
chức năng của mình sẽ in HTML cho hộp meta để đây là nơi tốt nhất để thực hiện điều này:
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;
}
Có một vài vấn đề mà tôi không biết phải khắc phục như thế nào. Trình chỉnh sửa tinyMCE sẽ được lồng bên trong metabox, có thể không lý tưởng và nó sẽ không có khả năng chuyển đổi giữa chế độ chỉnh sửa HTML và Visual, cũng như các lệnh chèn phương tiện mà trình soạn thảo bài đăng thông thường có. Việc chuyển đổi các chế độ dường như được xác định là một chức năng mà đối số đầu tiên là ID, nhưng nó cũng có vẻ được mã hóa thành tập lệnh wp-tinymce. Có thể sử dụng các hàm tinyMCE tích hợp để làm như vậy, nhưng điều này thay đổi vùng văn bản giữa tinyMCE đầy đủ và textarea cơ bản, không có bất kỳ nút chèn HTML WP nào.
Đầu tiên: Cảm ơn rất nhiều đến @Thomas McDonald vì câu trả lời của anh ấy ; Tôi cần phải tìm ra chính xác cùng một câu hỏi mà @Paul Sheldrake đã hỏi và mã của Thomas đã giúp tôi bắt đầu đi đúng hướng.
Thật không may, sau đó tôi bị kẹt vì tôi cần thay đổi bố cục từ mặc định sang bố cục đơn giản và nhỏ hơn vì tôi cần sử dụng TinyMCE trong một siêu dữ liệu phụ. Tôi đã tìm kiếm thực tế ở khắp mọi nơi để tìm giải pháp và đặc biệt là trên MoxieCode TinyMCE Wiki và TinyMCE Mẹo & Cách diễn đàn và không tìm thấy gì! 1 Tất cả những gì tôi tìm thấy giải thích làm thế nào để thiết lập theme
, width
, height
vv sử dụng tinyMCE.init({...})
nhưng dường như bạn không thể sử dụng khi bạn sử dụng tinyMCE.execCommand("mceAddControl")
.
Tôi đã bối rối khi tôi chạy qua bài viết nhiều trường hợp TinyMCE 3 trên một trang của Hamilton Chua , và anh ta đóng đinh nó! Giải pháp của ông là chỉ định tinyMCE.settings
trước khi gọi tinyMCE.execCommand("mceAddControl")
, ví dụ:
<?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;
Điều đáng buồn là điều này thực sự không khó, nhưng nó không được ghi lại ở bất kỳ nơi nào khác mà tôi có thể tìm thấy. Thật tuyệt vời khi phát hiện ra hầu như không ai khác gặp phải vấn đề này.
Vì vậy, dù sao đoạn mã trên đã tạo ra TinyMCE thứ hai sau đây theo đúng định dạng / bố cục mà khách hàng của tôi cần:
(nguồn: mikechinkel.com )
Vì vậy, nếu bạn đang sử dụng mã @Thomas McDonald ở trên, bạn thấy bạn có bất kỳ nhu cầu sửa đổi bố cục nào, hãy chắc chắn kiểm tra bài viết tuyệt vời của Hamilton Chua (cảm ơn Ham!) :
PS Nếu bạn làm điều gì đó thậm chí hơi sai, TinyMCE có thể hoàn toàn không hiển thị. Ví dụ trong trường hợp của tôi, tôi sử dụngtheme: "simple"
lúc đầu và tôi không có gì và tôi phải mất hơn một giờ để nhận ra rằng tôi chỉ cần sử dụngtheme: "advanced"
. Vì vậy, nếu bạn thấy TinyMCE không hoạt động, bạn chắc chắn sẽ thử thay đổi mọi thứ xung quanh, bạn có thể gặp vấn đề tương tự. (BTW, tôi chưa thử bất kỳ chủ đề nào khác cũng như không khám phá những chủ đề khác có sẵn; nếu bạn tìm thấy các chủ đề khác hoạt động, vui lòng để lại nhận xét bên dưới.)
1 : Rất bực bội! Sau hơn một tháng với WordPress Trả lời, bây giờ tôi đang mong đợi tìm câu trả lời cho tất cả các câu hỏi của mình có cùng mức chất lượng như ở đây và ở nơi khác tôi thường thấy thất vọng!
$script
và cũng không có kết thúc cho di sản của bạn, tức là. EOT;
. Ngoài những lỗi nhỏ, đó là một ví dụ hoạt động tốt ..;)
Vì tôi thấy bài viết này là kết quả đầu tiên trong Google, tôi chỉ muốn nhận xét rằng WP hiện cung cấp một chức năng để xử lý loại nhiệm vụ này.
Trong add_meta_box
hàm, thêm đoạn mã sau ->
wp_editor( $content, $editor_id, $settings = array() );
Bất cứ nơi nào bạn muốn thêm trình soạn thảo TinyMCE
Tài liệu tham khảo: wp_editor
Trình soạn thảo mặc định, tinymce, được tải bởi một hàm trong wp-admin / gồm / post.php được gọi là wp_tiny_mce (); Tìm trong nguồn ở dòng 1350. Có một loạt các cài đặt ở dòng 1478. Một trong các tùy chọn rõ ràng chỉ định bộ chọn textarea để áp dụng trình soạn thảo javascript. Tôi đã đọc bài viết này của Keighl trên blog của anh ấy chỉ cho tôi về nó. Đọc bài viết và có thể có cách gọi wp_tiny_mce () trong plugin phần quản trị và áp dụng nó vào vùng văn bản thứ hai bạn tạo.
Tôi đã nhận được nó chỉ bằng cách thêm vào các thuộc tính lớp theEditor, một thuộc tính lớp vào văn bản:
<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>