맞춤형 게시물 유형으로 N 개의 WYSIWYG 편집기를 얻는 방법이 있습니까?


27

맞춤 게시물 유형에 대해 여러 개의 WYSIWYG 편집기를 사용하는 방법이 있습니까? 예를 들어 열 레이아웃이 2 개인 경우 한 열에 대해 하나의 편집기를 만들고 다른 열에 대해 다른 편집기를 원했습니다.


어떤 종류의 WYSIWYG 구성이 필요합니까? 전체 패널 포함 이미지 업로드, 전체 화면 모드 등?
— 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메타 상자에 적용 할 ID, 메타 상자에 부여 할 Second Column제목, 메타 상자에 second_column_box대한 HTML을 인쇄하는 기능, properties사용자 정의 게시물 유형, normal메타 상자의 위치 이며 high가능한 한 페이지에서 높게 표시되도록 지정합니다. (일반적으로 기본 tinyMCE 편집기 아래).

그런 다음 이것을 가장 기본적인 예로 사용하여 tinyMCE 편집기를 텍스트 영역에 연결해야합니다. 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 편집기는 메타 박스 안에 중첩되어 이상적이지 않을 수 있으며 HTML 및 Visual 편집 모드와 일반 포스트 편집기의 미디어 삽입 명령 사이를 전환하는 기능은 제공하지 않습니다. 모드 전환은 첫 번째 인수가 ID 인 함수로 정의 된 것으로 보이지만 wp-tinymce 스크립트로 코딩 된 것으로 보입니다. 내장 된 tinyMCE 함수를 사용하여이를 수행 할 수 있지만 WP HTML 삽입 단추없이 전체 tinyMCE와 기본 텍스트 영역 사이에서 텍스트 영역을 변경합니다.


"Meta_boxen"? 대박! 나는 내가 유일한 사람이라고 생각했다. 잠시 후에 솔루션을 사용해보십시오.
— mfields

Thomas McDonalds 솔루션이 3.1에서 작동하지 않습니다. 3.1 에서이 방법이 있습니까?

19

첫째 : 큰 덕분 에 @Thomas 맥도날드 에 대한 그의 대답 ; @Paul Sheldrake가 요청한 것과 동일한 질문을 정확히 찾아야 했고 Thomas의 코드가 올바른 방향으로 시작했습니다.

불행히도 측면 메타 박스에서 TinyMCE를 사용해야 했기 때문에 레이아웃을 기본 에서 더 간단하고 작은 레이아웃 으로 변경해야 했기 때문에 중단되었습니다. 나는 실제로 MoxieCode TinyMCE Wiki 와 TinyMCE Tips & How To Forum 에서 해결책을 찾기 위해 거의 모든 곳을 보았지만 아무것도 발견하지 못했습니다! (1) 모든 나는 어떻게 설정에 설명 발견 theme, width, height사용 등 tinyMCE.init({...})하지만 분명히 당신은 당신이 사용하는 경우 사용할 수 없습니다 tinyMCE.execCommand("mceAddControl").

Hamilton Chua의 한 페이지에서 여러 TinyMCE 3 인스턴스 기사를 살펴 보았을 때 충격을 받았습니다 . 그의 해결책은을 호출하기 전에 할당하는 것이 었습니다 .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;

슬픈 부분은 이것이 실제로 어렵지는 않지만 내가 찾을 수있는 다른 곳에서는 문서화되지 않았다는 것입니다. 다른 사람이이 문제를 경험 한 사람이 거의 없음을 알게되면 놀랍습니다.

어쨌든 위의 코드는 클라이언트가 필요로하는 형식 / 레이아웃으로 다음 두 번째 TinyMCE를 생성했습니다.

WordPress 3.0 관리자 편집기의 여러 TinyMCE 텍스트 영역
(출처 : mikeschinkel.com )

따라서 위의 @Thomas McDonald 코드를 사용하는 경우 Hamilton Chua의 멋진 기사 (Ham 감사 합니다)를 확인하기 위해 레이아웃을 수정해야 할 필요가 있음을 발견했습니다 .

추신 : 약간의 잘못이라도 TinyMCE가 전혀 보이지 않을 수도 있습니다. 예를 들어, 제 경우theme: "simple"에는 처음에사용했는데 아무 것도 얻지 못했고 방금 사용해야한다는 것을 깨닫기 위해 한 시간이 걸렸습니다theme: "advanced". 따라서 TinyMCE가 작동하지 않는 것을 발견하면 주변 환경을 바꿔보십시오. 비슷한 문제가있을 수 있습니다. (BTW, 다른 테마를 시도하지 않았거나 다른 테마를 탐색하지 않았습니다. 작동하는 다른 테마를 찾으면 아래에 의견을 남겨주십시오.)

각주

1 : 매우 실망 스럽다! WordPress Answer로 한 달이 조금 넘는 시간이 지난 지금 나는 여기에서와 같은 수준의 품질로 모든 질문에 대한 답을 찾을 것으로 기대하고 있습니다.


마이크, 당신은 평등을 잃어 $script버렸고 또한 당신의 이교도에 대한 결말도 없습니다. EOT;. 작은 오류를 제외하고는 좋은 작업 사례입니다 ..;)
— t31os

@ t31os-알려 주셔서 감사합니다. 내가 어떻게 그리웠는지 모르겠습니다. 나는 보통 작업 코드에서 답변을 테스트하고 복사합니다. 그림을 이동!
— MikeSchinkel

이 솔루션을 사용하면 일반 비주얼 편집기가 3.1에서 나에게 SimpleLayout으로 설정되었습니다.
— mfields

@mfields-3.1이 너무 많은 것들을 깨뜨린 Bummer. :-(
— MikeSchinkel

: 그것은 몇 가지 명확히 수 있으므로,이 문서에 관심을 끌기 위해 구함 dannyvankooten.com/450/...을
— marfarma

2

이 기사를 Google의 첫 번째 결과로 찾았으므로 WP는 이제 이러한 종류의 작업을 처리하는 기능을 제공한다고 언급하고 싶었습니다.

add_meta_box함수 내에서 다음 코드를 추가하십시오->

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

TinyMCE 편집기를 추가하려는 곳

참고: wp_editor


1
답은 단순한 링크 이상이어야합니다 . 실제로 누군가가 답을 찾을 수 있는 경로 대신 답이되어야합니다 . 링크 부패를 방지하고, 답변을 편집 하며, OP 및 이후 방문자가 문제를 해결하는 데 도움이되는 필요한 정보를 제공하십시오.
— kaiser

0

기본 편집기 인 tinymce는 wp-admin / includes / post.php의 함수 인 wp_tiny_mce ()에 의해로드됩니다. 1350 행 의 소스 를 보십시오. 1478 행에 설정 배열이 있습니다. 옵션 중 하나가 텍스트 영역 선택기를 지정하여 javascript 편집기를 적용 할 것입니다. 나는 Keighl 이 자신의 블로그 에서이 게시물을 읽었 습니다. 기사를 읽고 어쩌면 관리자 섹션 플러그인에서 wp_tiny_mce ()를 호출하여 생성 한 두 번째 텍스트 영역에 적용하는 방법이 있습니다.


0

텍스트 영역에“theEditor”를 클래스 속성으로 추가하여 얻었습니다.

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