WP 3.9でTinyMCE4をカスタマイズする方法-スタイルとフォーマットの古い方法はもう機能しません


10

WP 3.9以前は、functions.phpに次の2つのフィルターが適用されていました。

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のみが表示され、カスタムスタイルのドロップダウンには「Header gross」、「Header klein」などが表示されます。しかし、残念ながら、wp 3.9以降、wpとtinymceは問題になりません。標準の段落形式のドロップダウンしか表示されません。

段落

標準のスタイル形式のドロップダウンと同様に:

スタイル

これまでのところ、tinymce 4へのアップデートでフックが変更されたかどうかに関するドキュメントは見つかりませんでした。誰か知っていますか?よろしくラルフ

更新:もう少し調査に基づいてわかりました。その下にあるコメントは、私が理解したと思います:

//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');

1
wordpress.stackexchange.com/questions/139163/…を見たことはありますか?
fuxia

いいえ、見ていません。ありがとう!しかし、残念なことに、そこに記述されているコードでは、スタイルと段落のドロップダウンを再形成する代わりにボタンを作成することしかできません。読んで研究し続ける必要があります。
ermarus 14

元のメニュー項目を保持し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_2れていることがわかりますclass-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'
        );

そのことを念頭に置いて、新しいターゲットは1.(理想的には)を変更するeditor.settings.block_formatsか、2。ボタンをフィルタリングmce_buttons_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サンプルでは、​​「Red Headline」オプションは赤です。私はこれを理解できませんでした。もしそうなら、私に知らせてください。


ヘルガありがとう!以前にもclass-wp-editorを調べました。しかし、構文がどうあるべきか不明でした(更新されたtinymceapiのwp関連のドキュメントはあまりありません)。今あなたの提案を試みました。最初のスニペットと同じ結果。TinyMCEは、initがどのように見えるかを気にしません。TinyMCEのサイト上で私はJS、カスタムフォーマットの一例を見つけた、と私はWPとPHPの方にそれを適応させるために失敗しました:tinymce.com/tryit/custom_formats.php
ermarus

1
ありがとうございます。block_formatsオプションに末尾を付けることはできないことを追加したかっただけです。。保存された構成可能なオプションから値を構築していて、末尾がありました。それはリストを手放した。誰かが数分節約できることを願っています。
アダム教皇

1
@indextwoうん、私はここでそれを解決し(できる限り最善を尽くして)決定しました...ちょっと...ブログ投稿!あなたはそれをインラインとして定義しても、スパンでクラスを取得しませんか?array( 'title' => 'Red text', 'inline' => 'span', 'styles' => array( 'color' => '#ff0000' ) ),
helgatheviking 2014年

2
フォーマットメニューの項目は、カラースタイルを除いて、editor-styles.cssからスタイルを継承します。あなたにも、色のスタイルをしたい場合は、mce_mod()関数にこのコードを追加することが私の仕事:unset($init['preview_styles']);
ダルトン

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.