WP 3.9에서 TinyMCE4를 사용자 정의하는 방법-스타일과 형식에 대한 기존 방식이 더 이상 작동하지 않습니다


10

WP 3.9 이전에는 functions.php에 다음 두 필터가 적용되었습니다.

function my_mce_buttons_2( $buttons ) {
    array_unshift( $buttons, 'styleselect' );
    return $buttons;
}
add_filter('mce_buttons_2', 'my_mce_buttons_2');

function mce_mod( $init ) {
    $init['theme_advanced_blockformats'] = 'p,h3,h4';
    $init['theme_advanced_styles'] = "Header gross=mus-bi news-single-bighead; Header klein=mus-bi news-single-smallhead; Link=news-single-link; List Items=news-single-list";
    return $init;
}
add_filter('tiny_mce_before_init', 'mce_mod');

단락 형식 드롭 다운에는 p, h3 및 h4 만 표시되고 사용자 정의 스타일 드롭 다운에는 "헤더 총", "헤더 클라인"등이 표시됩니다. 그러나 불행히도 wp와 tinymce는 wp 3.9 이후 더 이상 귀찮게하지 않습니다. 현재 표준 단락 형식 드롭 다운 만 볼 수 있습니다.

절

표준 스타일 형식 드롭 다운뿐만 아니라

스타일

지금까지 나는 hooks가 tinymce 4로 업데이트되었는지에 대한 문서를 찾지 못했습니다. 감사합니다 Ralf

업데이트 : Ok 조금 더 많은 연구와 아래의 의견을 바탕으로 내가 알아 낸 것 같습니다.

//Creating the style selector stayed the same
function my_mce_buttons( $buttons ) {
   array_unshift( $buttons, 'styleselect' );
   return $buttons;
}
add_filter('mce_buttons', 'my_mce_buttons');

function mce_mod( $init ) {
   //theme_advanced_blockformats seems deprecated - instead the hook from Helgas post did the trick
   $init['block_formats'] = "Paragraph=p; Heading 3=h3; Heading 4=h4";

   //$init['style_formats']  doesn't work - instead you have to use tinymce style selectors
   $style_formats = array(
    array(
        'title' => 'Header 3',
        'classes' => 'mus-bi news-single-bighead'
    ),
    array(
        'title' => 'Header 4',
        'classes' => 'mus-bi news-single-smallhead'
    ),
    array(
        'title' => 'Link',
        'block' => 'a',
        'classes' => 'news-single-link',
        'wrapper' => true
    )
   );
   $init['style_formats'] = json_encode( $style_formats );
   return $init;
}
add_filter('tiny_mce_before_init', 'mce_mod');


아니요, 보지 못했습니다. 감사! 그러나 불행히도 거기에 설명 된 코드를 사용하면 스타일과 단락 드롭 다운을 변경하는 대신 버튼을 만들 수 있습니다. 계속 읽고 연구해야합니다.
ermarus

다음은 원래 메뉴 항목을 유지하고 style_select"클래스"메뉴를 추가하는 방법입니다. wordpress.stackexchange.com/questions/143689/…
Howdy_McGee

답변:


19

살펴보면 class-wp-editor.php사용중인 필터가 여전히 있지만 설정이 다릅니다.

self::$first_init = array(
                    'theme' => 'modern',
                    'skin' => 'lightgray',
                    'language' => self::$mce_locale,
                    'formats' => "{
                        alignleft: [
                            {selector: 'p,h1,h2,h3,h4,h5,h6,td,th,div,ul,ol,li', styles: {textAlign:'left'}},
                            {selector: 'img,table,dl.wp-caption', classes: 'alignleft'}
                        ],
                        aligncenter: [
                            {selector: 'p,h1,h2,h3,h4,h5,h6,td,th,div,ul,ol,li', styles: {textAlign:'center'}},
                            {selector: 'img,table,dl.wp-caption', classes: 'aligncenter'}
                        ],
                        alignright: [
                            {selector: 'p,h1,h2,h3,h4,h5,h6,td,th,div,ul,ol,li', styles: {textAlign:'right'}},
                            {selector: 'img,table,dl.wp-caption', classes: 'alignright'}
                        ],
                        strikethrough: {inline: 'del'}
                    }",
                    'relative_urls' => false,
                    'remove_script_host' => false,
                    'convert_urls' => false,
                    'browser_spellcheck' => true,
                    'fix_list_elements' => true,
                    'entities' => '38,amp,60,lt,62,gt',
                    'entity_encoding' => 'raw',
                    'keep_styles' => false,
                    'paste_webkit_styles' => 'font-weight font-style color',

                    // Limit the preview styles in the menu/toolbar
                    'preview_styles' => 'font-family font-size font-weight font-style text-decoration text-transform',

                    'wpeditimage_disable_captions' => $no_captions,
                    'wpeditimage_html5_captions' => current_theme_supports( 'html5', 'caption' ),
                    'plugins' => implode( ',', $plugins ),
                );

추측하고 있지만 대상 배열 키를 변경해야한다고 생각합니다 formats.

편집 이것을 그대로 두십시오. 그러나 OP는 이것이 시도하고있는 것을하지 않는다는 것을 확인합니다.

function mce_mod( $init ) {
        $init['formats'] = "{
                            alignleft: [
                                {selector: 'p,h3,h4,td,th,div,ul,ol,li', styles: {textAlign:'left'}},
                                {selector: 'img,table,dl.wp-caption', classes: 'alignleft'}
                            ],
                            aligncenter: [
                                {selector: 'p,h3,h4,td,th,div,ul,ol,li', styles: {textAlign:'center'}},
                                {selector: 'img,table,dl.wp-caption', classes: 'aligncenter'}
                            ],
                            alignright: [
                                {selector: 'p,h3,h4,td,th,div,ul,ol,li', styles: {textAlign:'right'}},
                                {selector: 'img,table,dl.wp-caption', classes: 'alignright'}
                            ],
                            strikethrough: {inline: 'del'}
                        }";
    return $init;
}
add_filter('tiny_mce_before_init', 'mce_mod');

이 테스트는 완전히 테스트되지 않았으므로 마일리지가 다를 수 있습니다. 테스트하기 전에는 프로덕션 사이트에서 사용하지 마십시오.

계속해서

더 깊게 파고 들으면 사용자 정의 tinyMCE 버튼으로 보입니다. 당신이 볼 수있는 formatselect버튼이 추가됩니다 mce_buttons_2class-wp-editor.php. 그리고 나는 그것을 추적했다 tinymce.js:

    editor.addButton('formatselect', function() {
        var items = [], blocks = createFormats(editor.settings.block_formats ||
            'Paragraph=p;' +
            'Address=address;' +
            'Pre=pre;' +
            'Heading 1=h1;' +
            'Heading 2=h2;' +
            'Heading 3=h3;' +
            'Heading 4=h4;' +
            'Heading 5=h5;' +
            'Heading 6=h6'
        );

이를 염두에두고 새로운 목표는 사용자 정의 버전 editor.settings.block_formats을 필터링 mce_buttons_2하고 추가하여 해당 버튼 을 1. 이상적으로 변경 하거나 2. 제거하는 것 입니다.

테스트 및 작업

function mce_mod( $init ) {
    $init['block_formats'] = 'Paragraph=p;Heading 3=h3;Heading 4=h4';

    $style_formats = array (
        array( 'title' => 'Bold text', 'inline' => 'b' ),
        array( 'title' => 'Red text', 'inline' => 'span', 'styles' => array( 'color' => '#ff0000' ) ),
        array( 'title' => 'Red header', 'block' => 'h1', 'styles' => array( 'color' => '#ff0000' ) ),
        array( 'title' => 'Example 1', 'inline' => 'span', 'classes' => 'example1' ),
        array( 'title' => 'Example 2', 'inline' => 'span', 'classes' => 'example2' )
    );

    $init['style_formats'] = json_encode( $style_formats );

    $init['style_formats_merge'] = false;
    return $init;
}
add_filter('tiny_mce_before_init', 'mce_mod');

function mce_add_buttons( $buttons ){
    array_splice( $buttons, 1, 0, 'styleselect' );
    return $buttons;
}
add_filter( 'mce_buttons_2', 'mce_add_buttons' );

작은 경고 : 드롭 다운 항목 자체에 스타일을 추가 할 위치를 잘 모르겠습니다. TinyMCE 샘플에서 "빨간색 제목"옵션은 빨간색입니다. 나는 이것을 알아낼 수 없었다. 당신이 경우 알려 주시기 바랍니다.


감사합니다 나도 class-wp-editor를 살펴 보았습니다. 그러나 구문이 무엇인지 확실하지 않았습니다 (업데이트 된 tinymceapi에 대한 wp 관련 문서는 많지 않습니다). 당신의 제안을 지금 시도하십시오. 내 초기 스 니펫과 같은 결과. TinyMCE는 init의 모양을 신경 쓰지 않습니다. TinyMCE를 사이트에 난 단지 JS, 사용자 정의 형식에 대한 예를 발견했습니다, 그리고 난 WP와 PHP쪽으로 적응하는 데 실패 : tinymce.com/tryit/custom_formats.php
ermarus

1
큰 도움, 감사합니다! block_formats옵션에 후행을 가질 수 없다는 것을 추가하고 싶었습니다 . . 저장 가능한 구성 가능한 옵션으로 가치를 쌓고 있었고 후행이있었습니다. 그것은 목록을 질식시켰다. 누군가를 구 해주길 바랍니다.
Adam Pope

1
@ indextwo yup, 나는 그것을 (내가 할 수있는 한 최선) 해결하고 결정했다 ... 야 ... 블로그 게시물! 클래스를 인라인으로 정의하더라도 스팬을 얻지 못합니까? array( 'title' => 'Red text', 'inline' => 'span', 'styles' => array( 'color' => '#ff0000' ) ),?
helgatheviking

2
서식 메뉴의 항목 은 색상 스타일을 제외하고 editor-styles.css에서 스타일을 상속합니다 . 색상 스타일도 원한다면이 코드를 mce_mod () 함수에 추가하면 나에게 도움이된다.unset($init['preview_styles']);
Dalton

1
작은 경고 에 관한 @helgatheviking : 설정하면 모든 스타일을 활성화 할 수 있습니다 $init['preview_styles'] = 'font-family font-size font-weight font-style text-decoration text-transform color background-color border border-radius outline text-shadow';. 좀 더 명백한 방식이지만 이것이 @Dalton이 제안한 것과 본질적으로 동일하다고 생각합니다. 이것은 단순히 TMCE 문서에
robro
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.