WordPress のビジュアルエディタ(ビジュアルリッチエディター) TinyMCE のカスタマイズ等に関する個人的なメモ。
目次
ビジュアルエディタはテンプレートとスタイルが違うので、テンプレートと同じスタイルを適用できるようにエディタスタイルシートを有効にする。
以下を function.php に記述。
- // 管理画面(ビジュアルエディタ)にオリジナルのスタイルを適用
- add_editor_style('editor-style.css');
エディタスタイルシートを有効にすると、テーマフォルダ内の editor-style.css が編集画面の本文に適用されるようになるのでテーマフォルダ内に editor-style.css というファイルを作成する。
但し、クラスや ID で指定していない要素はスタイルを指定できないので、以下のようにして「editor-area」というクラスを指定しておくと良い。
functions.php
- function custom_editor_settings( $initArray ){
- $initArray['body_class'] = 'editor-area';
- return $initArray;
- }
- add_filter( 'tiny_mce_before_init', 'custom_editor_settings' );
出力されるビジュアルエディタの body 要素の例。(editor-area が追加されている)
- <body id="tinymce" class="mce-content-body editor-area mceContentBody wp-editor html4-captions" onload="window.parent.tinymce.get('content').fire('load');" contenteditable="true">
editor-style.css の例
editor-style.css
- @charset "utf-8";
- body.mceContentBody {
- font-size: 12px;
- font-family: "メイリオ",Meiryo,Osaka,"ヒラギノ角ゴ Pro W3","Hiragino Kaku Gothic Pro","MS Pゴシック","MS PGothic",sans-serif;
- max-width: 600px;
- }
- .editor-area a {
- color: green;
- text-decoration: underline;
- }
- .editor-area p {
- margin: 0 0 1em 0;
- }
- p.wp-caption-text {
- margin: 0;
- }
- .alignleft {
- display: block;
- float: left;
- margin-right: 10px;
- margin-bottom: 1em;
- }
- .aligncenter {
- display: block;
- margin:0 auto;
- }
- .alignright {
- display: block;
- float: right;
- margin-left: 10px;
- margin-bottom: 1em;
- }
- .clear {
- clear: both;
- }
- .space1em {
- clear: both;
- height: 1em;
- }
- .space2em {
- clear: both;
- height: 2em;
- }
スタイルが反映されない場合
editor-style.css を設定してもスタイルが反映されない場合は、ブラウザのキャッシュをクリアしてみる。
ボタンを追加するには、functions.php に以下のコードを記述。(「背景色」と「hr タグ」のボタンを追加する例)
functions.php
- // ビジュアルエディタにボタンを追加
- function add_mce_extrabuttons($buttons){
- array_push($buttons, "backcolor", "hr");
- return $buttons;
- }
- add_filter("mce_buttons", "add_mce_extrabuttons");
追加できるボタンは以下のようなものがある(他にもあると思います)。
以下ののサイトを参考にさせていただきました。
editor_plugin.js という Javascript ファイルを作成して保存(この例ではオリジナルのテーマフォルダ内の「js」というフォルダに保存)。
以下はフロートを解除したりする3つのボタンを追加する例。
editor_plugin.js
- (function() {
- tinymce.create('tinymce.plugins.myButtons', {//プラグイン関数名
- getInfo : function() {//プラグイン情報
- return {
- longname : 'WDL myButtons',
- author : 'WDL',
- authorurl : 'https://www.webdesignleaves.com',
- infourl : 'https://www.webdesignleaves.com',
- version : "0.1"
- };
- },
- init : function(ed, url) {
- var t = this;
- t.editor = ed;
- //追加する1つ目のボタン
- ed.addCommand('Div_01',//コマンドID
- function() {
- var str = t._MyDiv01();
- ed.execCommand('mceInsertContent', false, str);
- });
- ed.addButton('Div_01', {//ボタンの名前
- title : 'フロートクリア', //tileのテキスト
- cmd : 'Div_01', //コマンドID
- image : url + '/images/mce_btn01.png' //ボタン画像(js/images)
- });
- //追加する2つ目のボタン
- ed.addCommand('Div_02',//コマンドID
- function() {
- var str = t._MyDiv02();
- ed.execCommand('mceInsertContent', false, str);
- });
- ed.addButton('Div_02', {//ボタンの名前
- title : '1行分スペース', //tileのテキスト
- cmd : 'Div_02', //コマンドID
- image : url + '/images/mce_btn02.png' //ボタン画像(js/images)
- });
- //追加する3つ目のボタン
- ed.addCommand('Div_03',//コマンドID
- function() {
- var str = t._MyDiv03();
- ed.execCommand('mceInsertContent', false, str);
- });
- ed.addButton('Div_03', {//ボタンの名前
- title : '2行分スペース', //tileのテキスト
- cmd : 'Div_03', //コマンドID
- image : url + '/images/mce_btn03.png' //ボタン画像(js/images)
- });
- },
- //追加する1つ目のボタンで挿入する内容(HTML)
- _MyDiv01 : function(d, fmt) {//挿入する HTML
- str = '<div class="clear"></div><br>';
- return str;
- },
- //追加する2つ目のボタンで挿入する内容(HTML)
- _MyDiv02 : function(d, fmt) {//挿入する HTML
- str = '<div class="space1em"></div><br>';
- return str;
- },
- //追加する3つ目のボタンで挿入する内容(HTML)
- _MyDiv03 : function(d, fmt) {//挿入する HTML
- str = '<div class="space2em"></div><br>';
- return str;
- }
- });
- tinymce.PluginManager.add('myButtons', tinymce.plugins.myButtons);//プラグインID,プラグイン関数名
- })();
また、以下のようにすると良いとのこと。(但し、この例では事情があり、改行コードを入れています。)
ボタンの画像は 20x20px で作成して保存。
この例ではオリジナルテーマのフォルダ内の js というフォルダ(editor_plugin.js があるフォルダ)の中に「images」というフォルダを作成してその中に保存。
以下を functions.php に記述。
- class myMceButton {
- function myMceButton() {
- add_action('init', array(&$this, 'addbuttons'));
- }
- function sink_hooks(){
- add_filter('mce_plugins', array(&$this, 'mce_plugins'));
- }
- function addbuttons() {
- //編集権限なければリターン
- if ( ! current_user_can('edit_posts') && ! current_user_can('edit_pages') )
- return;
- //ビジュアルエディタの場合のみ追加
- if ( get_user_option('rich_editing') == 'true') {
- add_filter("mce_external_plugins", array(&$this, 'mce_external_plugins'));
- add_filter('mce_buttons', array(&$this, 'mce_buttons'));
- }
- }
- function mce_buttons($buttons) {
- //追加するボタンの名前(separator は区切り)
- array_push($buttons, "separator", "Div_01");
- array_push($buttons, "separator", "Div_02");
- array_push($buttons, "separator", "Div_03");
- return $buttons;
- }
- // TinyMCE プラグインファイルを読み込む: editor_plugin.js
- function mce_external_plugins($plugin_array) {
- //プラグイン関数名=ファイルの位置「originalTheme」部分を自分のテーマに変更
- $plugin_array['myButtons'] = site_url() .'/wp-content/themes/originalTheme/js/editor_plugin.js';
- return $plugin_array;
- }
- }
- $mybutton = new myMceButton();
- add_action('init',array(&$mybutton, 'myMceButton'));
ボタンで挿入した内容(HTML)のスタイルを設定。
style.css と editor-style.css の両方にスタイルの指定を追加。
style.css と editor-style.css
- .clear {
- clear: both;
- }
- .space1em {
- clear: both;
- height: 1em;
- }
- .space2em {
- clear: both;
- height: 2em;
- }