TinyMCE」タグアーカイブ

TinyMCE関連ドキュメント

ビジュアルエディタにアイコンボタンを追加する方法

旧サイトではビジュアルエディタにアイコンを表示する為に「WordPress Visual Icon Fonts」プラグインを利用していました。

この使い方は下記URLを参照してください。

  WordPress Visual Icon Fontsのインストール方法と使い方

 

しかしビジュアルエディタで使いたいアイコンはそんなに多くないので、プラグインを入れるより必要なアイコンだけをビジュアルエディタのメニュに追加すると簡単に利用できる様になります。

下記にその設定方法を解説していきます。

1.ビジュアルエディタにアイコンボタンを追加する流れ

下図の赤枠の中がビジュアルエディタに追加したアイコンボタンです

アイコンをクリックすると、ダッシュアイコンのコードが追加されて、上記のアイコンが文書に追加されます。

尚、その他のアイコンはTinyMCE Advanceプラグインでどのアイコンを何処に表示するか?をカスタマイズしています。

 

上図の様なアイコンボタンを追加する流れは下記になります。

1-1.追加するアイコンボタンの画像を作成します。

1-2.追加するボタンの名前をフィルターフックで指定します。

1-3.ボタン処理を行うJavaScripのファイルの場所を指定します。

1-4.JavaScriptファイルで、アイコン画像を読み込んだり、クリックした時の処理を記述します。

 

それでは具体的な設定を解説していきます。

1-1.追加するアイコンボタンの画像を作成します

テーマフォルダの中に「icon」というフォルダを作成し、この中に下記の様な画像ファイルを作成しています。

「tinymce.js」はJavaScriptファイルで1-3項及び1-4項で解説します。

 

<対応表>

ファイル名 アイコン 備考(クリックされた時に書かれるコード)
clock.png  ­ <span class=”dashicons dashicons-clock“></span>
edit.png  ­ <span class=”dashicons dashicons-edit“></span>
media-default.png  ­ <span class=”dashicons dashicons-media-default“></span>
welcome-write-blog.png  ­ <span class=”dashicons dashicons-welcome-write-blog“></span>

<画像作成時の注意点>

①画像サイズ:200×300px位の画像

②背景色:#f5f5f5

画像はGIMP等の画像編集ソフトで作成して下さい。

 

1-2.追加するボタンの名前をフィルターフックで指定します。

「functions.php」に下記プログラムを記述します

function add_icon_buttons($buttons) {
	$buttons[] = 'media-default';         // media-defaultアイコン
	$buttons[] = 'welcome-write-blog'; // welcome-write-blogアイコン
	$buttons[] = 'edit';                        // editアイコン
	$buttons[] = 'clock';                      // clockアイコン
return $buttons;}
add_filter( 'mce_buttons', 'add_icon_buttons' );

①関数の引数で現在のボタン配列($buttons)を取得します。

②ボタン配列の最後に4つのボタンを追加しています。

③ボタン配列を返し、フィルターフックの「mce_buttons」で書き込みを行っています。

上記で設定したのはボタンの名前だけです。

 

<ボタンを書き込む場所の解説>

ボタンを何処に追加するか?によって3つのフィルタフックがあります。

■一段目に追加する場合は「mce_buttons」を利用します。

■二段目に追加する場合は「mce_buttons_2」を利用します。

■三段目に追加する場合は「mce_buttons_3」を利用します。

 

1-3.ボタン処理を行うJavaScripのファイルの場所を指定します。

「functions.php」に下記プログラムを記述します

function plugins_directory($plugin_array) {
	$plugin_array['custom_button_script'] = get_stylesheet_directory_uri()."/icon/tinymce.js";
	return $plugin_array;}
add_filter( 'mce_external_plugins', 'plugins_directory' );

①引数で現在のスクリプト一覧を取得します。

②その配列の中の「custom_button_script」という変数に、利用するJavaScriptのファイル名を指定します。

上記の例ではテーマフォルダの中にあるiconフォルダの中にある「tinymce.js」ファイルを指定しています。

③スクリプト一覧を戻します。

④「mce_external_plugins」というフィルターフックで書き込みます。

上記で設定したのはJavaScriptのある場所だけです。

 

1-4.JavaScriptファイルで、アイコン画像を読み込んだり、クリックした時の処理を記述します。

いよいよここで、ボタン名に画像を指定したり、これがクリックされた時に何をするか?のプログラムを記述します。

「tinymce.js」に下記のプログラムを記述して保存します。

(function() {
	tinymce.create('add.buttons', {//関数名指定
		init : function(ed, url) { // ed には現在開いてるエディタの情報  urlにはこのJsファイルまでのパスが入る
// アイコン「media-default」のボタン設定 *********************************************
ed.addButton( 'media-default', {
				title : 'media-default',							        // ボタンのタイトル(マウスオーバー時に表示される)
				image : url + '/media-default.png',	// ボタン画像のパス
				cmd: 'media-default_cmd'				      // ボタンの処理プログラムの名前
			});
			// 「media-default_cmd」ボタン動作
ed.addCommand( 'media-default_cmd', function() {                                                           //上記で指定したコマンド名
				return_text = '&thinsp;<span class="dashicons dashicons-media-default">&thinsp;</span>&thinsp;';//返り値のセット 
				ed.execCommand('mceInsertContent', 0, return_text);                                                     //返り値の実行 
			});
			// アイコン「welcome-write-blog」のボタン設定 *****************************************
ed.addButton( 'welcome-write-blog', {
				title : 'welcome-write-blog',
				image : url + '/welcome-write-blog.png',
				cmd: 'welcome-write-blog_cmd'
			});
			// 「welcome-write-blog_cmd」ボタン動作
ed.addCommand( 'welcome-write-blog_cmd', function() {
				return_text =  '&thinsp;<span class="dashicons dashicons-welcome-write-blog">&thinsp;</span>&thinsp;';
				ed.execCommand('mceInsertContent', 0, return_text);
			});
			//アイコン「edit」のボタン設定 ********************************************************
ed.addButton( 'edit', {
				title : 'edit',						
				image : url + '/edit.png',	
				cmd: 'edit_cmd'			
			});
			// 「eedit_cmd」ボタン動作
ed.addCommand( 'edit_cmd', function() {
				return_text = '&thinsp;<span class="dashicons dashicons-edit">&thinsp;</span>&thinsp;';
				ed.execCommand('mceInsertContent', 0, return_text);
			});
			//アイコン「dashicons-clock」のボタン設定 *****************************************************
ed.addButton( 'clock', {
				title : 'clock',							
				image : url + '/clock.png',	
				cmd: 'clock_cmd'				
			});
			// 「dashicons-clock_cmd」ボタン動作
ed.addCommand( 'clock_cmd', function() {
				return_text = '&thinsp;<span class="dashicons dashicons-clock">&thinsp;</span>&thinsp;';
				ed.execCommand('mceInsertContent', 0, return_text);
			});
		},
	});
	tinymce.PluginManager.add( 'custom_button_script', add.buttons );
})();

以上でビジュアルエディタに4つのアイコンボタンを追加できます。

 

<解説>

プログラムを書くにあたって幾つかの注意点があります。

①プログラムは即時関数形式で書く

(function(window) { ここに処理を書く})(window);

上記の様な書き方が即時関数形式と呼ばれています。

これは、関数定義と実行を合わせて行う関数という意味です。

具体的に言うと{}の中にボタンの画像とボタンクリック時の動作を記述(関数定義)した後、(window)でこの関数を実行してボタン画像を表示します。

しかし、一般的にはwindowを省略して下記の様な書き方をします。この書き方が一般的です。

(function() { ここに処理を書く})();

 

②書き方の構造

(function() {
	tinymce.create('add.buttons', { 
		init : function(ed, url) {/*ここにアイコンボタンの定義を書きます*/	},
	});
	tinymce.PluginManager.add( 'custom_button_script', add.buttons );   
})();

■tinymce.createの第一引数に関数名(任意名称)、第二引数に処理の内容を記述します。

■init : function(ed, url) {}を指定すると、edにエディタ情報、urlにこのファイルまでのパスが返されます。

edとurlを使ってボタンの定義を行います。

■tinymce.PluginManager.addに関数名を指定し、実行します。

 

③アイコンボタンの定義例

ed.addButton( 'media-default', {       //mce_buttonsで設定したボタン名 
  title : 'media-default',                     // マウスオーバー時にボタンのタイトル
  image : url + '/media-default.png',  // ボタン画像のパス 
  cmd: 'media-default_cmd'              // ボタンの処理のコマンド名
}); 
ed.addCommand( 'media-default_cmd', function() {                                                          //上記で指定したコマンド名
  return_text = '&thinsp;<span class="dashicons dashicons-media-default">&thinsp;</span>&thinsp;';//返り値のセット 
  ed.execCommand('mceInsertContent', 0, return_text);                                                     //返り値の実行 
});

ボタンを複数設定する場合は、上記のい下に続けて書きます。

 ­注意

ダッシュアイコン  のコードは下記です。

<span class=”dashicons dashicons-media-default”>&thinsp;</span>&thinsp;

しかし、上記で書き込んでいるのは「&thinsp;」が追加されたコードになっています。

&thinsp;<span class=”dashicons dashicons-media-default”>&thinsp;</span>&thinsp;

「&thinsp;」は半角スペースの半分の幅のスペースです。これを入れる事によりアイコン前後にカーソルが入る様にしています。

書込みは必ずこの形式で行ってください。

 

④その他

 ­メモ

ダッシュアイコンのサイズ等を修正する場合はCSSに.dashicons{}で指定して下さい。

ビジュアルエディタにBOX全体がリンク対象(リンクBOX)を実装する

ビジュアルエディタでBOXを作る方法には下記の2種類のやり方があります。

表を使う   :参考サイトはビジュアルエディタの表機能をカスタマイズする

スタイルを使う:参考サイトはビジュアルエディタで<Enter>が使えるBOXを作成する方法

どちらでも可能ですが、ここでは表を使う場合を解説していきます。

よって①の表の設定ができている事が前提となります。

 

下記がサンプルのBOXです。BOXの何処をクリックしても指定されたURLにジャンプします。

<横に1つのBOX>

■リンク先は画像に設定されています。

 

<横に2つ並んだBOX>

■左が3PXの枠線で、右が4pxの枠線です。

■リンク先は両方とも画像に設定されています。

 

1.CSSの設定

上記のリンクBOXを実現する始めの設定はCSSです。

 

1-1.ビジュアルエディタのCSSに下記を追加します。

本テーマのビジュアルエディタのCSSは「editor-style.css」から「my-editor-style.css」に変更しています。

理由は下記ドキュメントを参照してください。

 ブロックエディタ時代にビジュアルエディタを使う方法

 ­親テーマが「editor-style.css」の時のスタイル機能の使い方

 

<my-editor-style.cssの設定>

/******************************************************************/
/* tableを使ったリンクBOX */
/*******************************************************************/
._____link_BOX________{}             /* スタイルの区切り線 */
td.link-waku3{                                  /* 枠線太さが3PXの設定 */
	padding:5px;
	border:3px solid #8b8682;
	cursor:pointer;          /* マウスがBOXに入るとカーソルが指マークになります */
}
td.link-waku4{                                  /* 枠線太さが4PXの設定 */
	padding:5px;
	border:4px solid #8b8682;
	cursor:pointer;
}
td.link-waku3:hover,
td.link-waku4:hover,{border-color:#9ed54c; /* マウスがBOXに入ると枠線のカラーが変わります */
}

■表のセル(tdタグ)に付与する枠線太さは3PXと4pxをスタイルで利用できる様にしています。

1px,2pxは線が細すぎるので上記設定としました。

■td.linkのスタイルは、マウスがBOXに入るとポインタが指マークに変わる事と枠線のカラーが変わる設定になります。

 

2-2.style.css にも同様な設定を追加します。

/******************************************************************/
/* tableを使ったリンクBOX */
/*******************************************************************/	
.entry-content td.waku3{
	padding:5px;
	border:3px solid #8b8682;
	cursor:pointer;}
.entry-content td.waku4{
	padding:5px;
	border:4px solid #8b8682;
	cursor:pointer;}
.entry-content td.link-waku3:hover,
.entry-content td.link-waku4:hover{border-color:#9ed54c;}

 

以上の設定で見かけ上はBOXの中の何処をクリックしても、設定されたリンク先にジャンプできそうに見えます。

しかい現実はリンクが設定されている画像をクリックしない限りはジャンプできません。

そこでBOX内のどこをクリックしてもジャンプさせる為には下記のJqueryプログラムが必要となります。

 

2.jqueryプログラムを作成する

­ ­jqueryプログラムとは

PHPプログラムはサーバのプログラムで、サーバ側で画面を生成しデバイス側に送ります。

しかしサーバ側のプログラムにはユーザが画面をどの様に操作したか?は判りません。

一方、jqueryはユーザがどの様な操作をしたのか?を検知して処理するプログラムです。

 

2-1.jqueryプログラムを作成する

①ルートディレクトリにJSフォルダを作成します。

②その中に「my-jquery.js」ファイルを作成し下記プログラムを登録します。

/*****************************************/
/* 自作のjqueryプログラム */
/*****************************************/	
/* link-boxの全体をリンクエリアにする設定 */
$(function(){
 $('.link-waku3,.link-waku4').click(function(){
  var url=$(this).find('a').attr('href');
  var target= $(this).find('a').attr('target');
  if(target == '_blank'){window.open(url,'_blank');}
  else{window.location= url;}
  return false;
 });
});

上記プログラムで行っている内容は「.link-waku3」又は「.link-waku4」エリアがクリックされたら、aタグを検索し、href属性とtarget属性を取り出す。そしてtarget属性によりリンク先の表示方法を変えている。

<詳細解説>

$(‘.link’).click(function(){×××});は「.link」がクリックされたらfunctionの×××を実行しなさい!という命令です。

②ビジュアルエディタのリンク設定画面の解説

■上図のURLにリンク先を入れると、href属性に「リンク先」が入ります

■リンクを新しいタブで開くを✔するとtarget属性に「_blank」が入ります。

var url=$(this).find(‘a’).attr(‘href’);

上記は、a要素を探しhref属性(リンク先)を変数urlに入れています。

var target= $(this).find(‘a’).attr(‘target’);

上記は、a要素を探しtarget属性の値(_blankか?)を変数targetに入れています。

⑤あとの処理は下記になります。
新しいタブで開く場合はwindow.open(url,’_blank’);を実行します。
現在のドキュメントを書き替える場合ははwindow.location= url;を実行します。

 

2-2.jquryプログラムの利用宣言

<header.php>に上記のJqueryプログラムをロードします。

<head>
<!-- 他の設定は省略 -->
<!--自作jqueryプログラムの利用宣言-->
<script src='<?php echo get_stylesheet_directory_uri();?>/js/my-jquery.js'></script>
</head>

■子テーマフォルダの「js」フォルダにある「my-jquery.js」をデバイス側に送ります。

 

3.リンクBOXの作成手順

2BOXタイプのリンクBOXを作成する手順です。

①表作成で1×3の表を作成し、マウス操作で幅を調整します。

 

②各セルにカーソルを入れ、スタイルから「td.link-waku3」または「td.link-waku4」を設定する。

左が「td.link-waku3」で右が「td.link-waku4」です。

以上でリンクBOXの作成が完了しました。

 

③ボックスの中にコンテンツを書き込みます。

コンテンツを作成した後は、画像等にリンク先を設定します。

■新しいタブにリンク先を表示させる場合は「リンクを新しいタブで開く」に✔をいれます。

以上でリンクBOXは完成します。

ビジュアルエディタにタブ機能(tab)を実装する

下記がビジュアルディタで作成したタブのサンプルです。

  • tab1
  • tab2

始めに表示されるコンテンツです

TAB2をクリックするとタブが切り替わります

これはTAB2がクリックされた時に表示されるデータです

TAB1をクリックするとタブが切り替わります

 


ここでは上記のタブ機能をビジュアルエディタに追加する方法を解説します。

 このドキュメント利用上の注意点

このドキュメントの中では[]を【】に置き換えて記述しています。

理由は解説に[]のままでショートコードを記述すると、更新処理でショートコード処理が動いてしまうからです。

よってこのドキュメントからソースをコピーする場合は、ペースト後、【】を[]に置き換えて利用して下さい。

 

1.タブ切替を追加するショートコードを作成する

functions.phpにタブを作成するショートコードを追加します。

/**************************************************/
/* TinyMCE Advancedにショートコードを追加 */
/**************************************************/
function my_scode($postarr) { 
	/*************************************
	 他のショートコードの設定(ここではその設定を省略します)
	 *************************************/
	 /* 2つのタブ開始************************/
	$search = '【tab2】';
	$replace= 
		'<div class="tab">
			<ul class="tab_title">
				<li class="select">tab1</li>
				<li>tab2</li>
			</ul>
			<div class="tab_data"><p>tab1のデータを入力して下さい。</p></div> 
			<div class="tab_data"><p>tab2のデータを入力して下さい。</p></div>
		<div>';
	$postarr['post_content'] = str_replace($search,$replace, $postarr['post_content'] );
	 /* タブ終了 ***************************/ 
 return $postarr;} 
add_filter('wp_insert_post_data', 'my_scode');

■ショートコードは複数登録されるので、上記にはタブに関するショートコードのみ記述しています。

■タブデータの構造は、全体を「tab」とし、子要素のタブタイトルが「tab_title」と、子要素のタブデータが「tab_data」から構成されます。

■「tab_title」はリストでli要素に「select」クラスが付いているのが現在表示されているタブになります。

この要素は「tab」要素から見ると孫要素になります。

■上記のプログラムをコピーする時は【】を[]に置き換えて利用して下さい

­­  メモ

上記はタブが2つの事例ですが、同様に3個等も同じような構造で作成できます。

私は、2から5までのタブ作成のショートコードを作成しています。

タブの数に関係なく、以下にに説明するCSSやJqueryは同じです。

 

2.CSSを設定する

2-1.ビジュアルエディタのCSSに下記を追加します。

本テーマのビジュアルエディタのCSSは「editor-style.css」から「my-editor-style.css」に変更しています。

理由は下記ドキュメントを参照してください。

 ブロックエディタ時代にビジュアルエディタを使う方法

 ­親テーマが「editor-style.css」の時のスタイル機能の使い方

 

<my-editor-style.cssの設定>

ショートコードを実行すると下図が表示されます。

これを表現するCSSを記述します。

/**********************************************************************/
/* タブ設定 */
/**********************************************************************/
._____tab________{}                                                           /* スタイルの区切り記号 */
ul.tab_title{                                         /**** タブ親要素 *************************/
	padding:0;margin:0;
	display:flex;
	justify-content:space-between;
}
ul.tab_title li{                                       /**** タブ子要素 *************************/
	margin:0;padding:10px;
	flex-grow:1;
	display:block;
	text-align:center;	
	font-size:14px;font-size:0.875rem;line-height:1.5em;letter-spacing:0.8pt;
	word-break:break-all;
	cursor:pointer;
	border-top-left-radius:5px;border-top-right-radius:5px;
	border:1px dashed #1d1d1d;
	border-bottom:1px solid #1d1d1d;	}
ul.tab_title li.select{                                               /**** タブ子要素(アクティブ) *****/
	border:1px solid #1d1d1d;
	border-bottom:none;}
div.tab_data{                                                        /**** タブ内の記述データ **********/
	margin-top:10px;
	padding:10px;
	border-radius:3px;
	border:1px dashed #008200;}

■タブ形状「.tab_title」とタブ内データ「.tab_data」から構成する。

■タブは横に並ぶので親要素「.tab_title」に「display:flex;」を指定することにより「.tab_title li」を横に並べる。

■「.tab_title li」のスタイルを定義した後、「.tab_title li.select」でアクティブタブのスタイルを上書きする。

■「.tab_data」はタブの中のデータを記述するBOXです。<Enter>等も利用可能です。

display:flex;

親要素に指定するFlexboxのCSSで子要素を横に並べます。

justify-content:space-between;

親要素に指定するFlexboxのCSSで子要素の1番目を左端、子要素の最後を右端に配置し、後は均等に配置する。

flex-grow:1;

子要素に指定するFlexboxのCSSで、タブ幅に余裕がある場合はギリギリまで拡大する。

word-break:break-all;

タブ幅に余裕がない場合は英単語の途中でも改行表示をする。

cursor:pointer;

タブの何処でもカーソルはリンク用の指マークにする。Jqueryでタブの何処でもリンクできる様にする必要がある。

罫線の引き方は「ul.tab_title li」で破線を引き、選択されているタブ「ul.tab_title li.select」は実線で上書きしている。

2-2.style.cssは下記の様なCSSを設定します。

ここで設定するCSSはビジュアルエディタとは異なり下図の様な表示になります。これを表示させるCSSを定義していきます。

/*******************************************************************/
/* タブ設定 */
/*******************************************************************/
.entry-content ul.tab_title{
	padding:0;margin:0;
	display:flex;
	justify-content:space-between;}
.entry-content ul.tab_title li{
	margin:0;padding:10px;
	flex-grow:1;
	display:block;
	text-align:center;
	font-size:14px;font-size:0.875rem;line-height:1.5em;letter-spacing:0.8pt;
	word-break:break-all;
	cursor:pointer;
	border-top-left-radius:5px;border-top-right-radius:5px;
	border:1px dashed #1d1d1d;
	border-bottom:1px solid #1d1d1d;}
.entry-content ul.tab_title li.select{
	border:1px solid #1d1d1d;
	border-bottom:none;}
/* タブデータ枠がビジュアルエディタと異なっています */
.entry-content div.tab_data{
	margin-top:0;                     /* ここが変更されています */
	padding:10px;
	border:1px solid #1d1d1d;   /* ここが変更されています */
	border-top:none;                 /* ここが変更されています */
}

■ビジュアルエディタのCSSと異なるのはタブ内データ「.tab_data」の表示方法だけです。

■変更箇所は枠線を実線にすると共に、タブとデータ表示の隙間を無くしています。

 

3.jqueryプログラムを作成する

最後はタブデータの表示やタブがクリックされた時にデータを切替えるjqueryプログラムです。

­ ­jqueryプログラムとは

PHPプログラムはサーバのプログラムで、サーバ側で画面を生成しデバイス側に送ります。

よってサーバ側のプログラムにはユーザが画面をどの様に操作したか?は判りません。

一方、jqueryはユーザがどの様な操作をしたのか?を検知して処理するプログラムになります。

 

3-1.jqueryプログラムを作成する

①ルートディレクトリにJSフォルダを作成します。

②その中に「my-jquery.js」ファイルを作成し下記プログラムを登録します。

下記プログラムは1ページに複数のタブデータが作成されても動くようにeachメソッドを使ったものになっています。

/* 本文のタブメニュの表示を切り替える設定 */
$(function() {
	$('.tab').each(function(no,element){
	$(element).children('.tab_data').css('display','none');         /* 初期処理 */
	$(element).children('.tab_data').eq(0).css('display','block');/* 初期処理 */
	$(element).find('.tab_title li').click(function() {                   /* タブがクリックされた時の処理 */
		var index = $(element).find('.tab_title li').index(this);
		$(element).children('.tab_data').css('display','none');
		$(element).children('.tab_data').eq(index).css('display','block');
		$(element).find('.tab_title li').removeClass('select');
		$(element).find('.tab_title li').eq(index).addClass('select');
		});
	});
});

<画面が表示された時の処理(初期処理)>

■画面が表示された後「tab」クラスを探します。これに「each」メソッドが使われているので1ページに2個の「tab」データがあっても順番に処理していきます。

function(no,element)の「no」はループの値、「element」には要素がはいります。

■次にこの「element」の子供(children)の「tab_data」の表示を「css(‘display’,’none’)」で総て非表示にします。

■次にこの「element」の子供(children)の「tab_data」の0番目(先頭のタブデータ)を「css(‘display’,’block’)」で表示します。

eq(n)は、何番目か?を指定するコマンドです。

以上でタブの1番目だけが表示されたタブデータが表示されます。

<タブがクリックされた時の処理>

■この「element」の孫(find)「.tab_title li」がクリックされた時の処理を記述します。

子要素は「children」、孫要素は「find」が基本ですが、子要素も「find」で探しても問題ありません。

■変数「index」にクリックされたタブの番号を入れます。

■この「element」の子供(children)の「tab_data」の表示を更新します

■この「element」の孫(find)「.tab_title li」の「select」クラス更新します。

以上でタブをクリックすると、表示を切り替えるプログラムが完了しました。

 

3-2.jquryプログラムの利用宣言

<header.php>に上記のJqueryプログラムをロードします。

<head>
<!-- 他の設定は省略 -->
<!--自作jqueryプログラムの利用宣言-->
<script src='<?php echo get_stylesheet_directory_uri();?>/js/my-jquery.js'></script>
</head>

■子テーマフォルダの「js」フォルダにある「my-jquery.js」をデバイス側に送ります。

 

4.具体的な操作方法

2つのタブの例で説明します。

①タブを入れたい所で【tab2】を入力し、更新ボタンを挿入します。

(注意:【】は[]です)

下記画面が表示されます。

 

タブタイトルを編集します。

タブタイトルは自由に編集できます。

タブをインデントする場合はタブ選択後、左下のガイドで<div>を選択後、インデントボタンでインデントして下さい。

 

③タブデータを編集します。

各タブに対応するタブデータエリアにコンテンツを記載します。
(このエリアは段落変更も可能なので自由なコンテンツ作成が可能です)

タブデータをインデントする場合は、左下のガイドで<div>を選択後、インデントボタンでインデントして下さい。

 

④保存して変更をプレビューします。

下記の様な画面が表示されます。

タブを切替えると、それに応じたコンテンツが表示されます。

以上でビジュアルエディタでタブを使ったコンテンツが書けるようになりました。

ビジュアルエディタに<Enter>が使えるメモBOXを実装する

TinyMCE Advancedの「スタイル」機能は1つの段落に対する定義になります。

よってこの「スタイル」機能で作成したBOXでは、段落変更(Enter)は利用できません。

しかしショートコードという新しい概念を導入すると、段落変更(Enter)が使える新しいタイプのBOXを作成する事が可能となります。

 このドキュメント利用上の注意点

このドキュメントの中では[]を【】に置き換えて記述しています。

理由は解説に[]のままでショートコードを記述すると、更新処理でショートコード処理が動いてしまうからです。

よってこのドキュメントからソースをコピーする場合は、ペースト後、【】を[]に置き換えて利用して下さい。

 

1.ショートコードを作成する

1-1.functions.phpに下記プログラムを登録します。

ここにショートコード(【memo】)と、変換するHTMLコードを指定します。

/**************************************************/
/* TinyMCE Advancedにショートコードを追加  */
/**************************************************/
function my_scode($postarr) {
	/* メモBOX *************************/
	$search = '【memo】';
	$replace= 
		 '<div class="my_memo">
			<p> <span class="dashicons dashicons-edit"> </span> メモ</p>
			<p>このBOXは段落替え(Enter)が使えます。</p>
		</div>';
	$postarr['post_content'] = str_replace($search,$replace, $postarr['post_content'] );
	return $postarr;}
add_filter('wp_insert_post_data', 'my_scode');

■フィルターフック「wp_insert_post_data」はビジュアルエディタで「更新」又は「下書きで保存」を実行した時にビジュアルエディタのデータをユーザプログラムに渡してくれる関数です。

引数の$postarr[‘post_content’] の中に入力されたデータが格納されています。

■上記の処理はビジュアルエディタのコンテンツの中に【memo】という文字列があったら、$replaceで定義したた文字列に置き換える処理をしています。

注意:上記プログラムをコピー&ペーストした場合は【】を必ず[]に変更して下さい。

 

2.BOXの表示スタイルを設定する

2-1.ビジュアルエディタのCSSに下記を追加します。

本テーマのビジュアルエディタのCSSは「editor-style.css」から「my-editor-style.css」に変更しています。

理由は下記ドキュメントを参照してください。

 ブロックエディタ時代にビジュアルエディタを使う方法

 ­親テーマが「editor-style.css」の時のスタイル機能の使い方

 

<my-editor-style.cssの設定>

/**********************************************************************/
/* メモボックス 対象:文字、画像 */
/**********************************************************************/
div.my_memo{
 margin:5px 0;
 padding:10px;
 border-radius:5px;
 background-color:#f5f0cf;
 overflow:auto; /*画像のはみ出しをなくす指定*/
 max-width:100%;
 font-size:14px;font-size:0.875rem;line-height:1.5em;letter-spacing:0.8pt;
}

 

2-2.style.cssにも上記と同じ内容を登録します。

/**********************************************************************/
/* メモボックス 対象:文字、画像 */
/**********************************************************************/
.entry-content  div.my_memo{
 margin:5px 0; 
 padding:10px;
 border-radius:5px;
 backgroundcolor:#f5f0cf;
 overflow:auto;
 max-width:100%;
 font-size:14px;font-size:0.875rem;line-height:1.5em;letter-spacing:0.8pt;
}

以上でショートコードを使った設定は完了です。

 

2.ショートコードで作成するメモBOXの操作方法

<作成>

メモボックスを入れたい所で【memo】を入れ「更新」又「下書きで保存」ボタンを挿入します 。

(実際に入力するコードは【】を[]に置き換えた文字列です)

下記BOXが表示されます。

 メモ

このBOXは段落替え(Enter)が使えます。

上記メモBOXの中では<Enter>を使った文書作成ができます。

当然<Shift+Enter>も利用可能です。

 

<文書作成時の注意点>

空白行を入れる時は空白行にスペースを入れて下さい。

下記の例では、2行目にスペースが入っています。

­ ­メモ

一行目

 

三行目

理由:二行目の先頭で<Enter>を挿入するとBOXの終了処理が行われてBOXからカーソルがでます。

それに合わせてアイコン文字も削除されます。

 

<メモBOX作成の終了>

メモBOXから出る場合はビジュアルエディタの下記アイコンを使ってください。

BOXから出た後、続きを読むーーーを削除します。

 

<メモBOXのインデント方法>

①メモBOXをクリックします。

②ビジュアルエディタの下に表示されるガイドからdivを選択します。

※上記が表示されない場合は、表示オプションを開いて「最大行表示エディターと集中執筆モード機能を有効化します」の✔を外して下さい。

③下記インデントボタンでインデントします。

­ ­注意

インデント操作には下記設定が必要になります。

 ­ビジュアルエディタでインデントが利用できる様にする

 

<メモBOXの削除>

下記のスタイルから「div.my_memo」をクリックします。

この操作でBOXが消え、通常ドキュメントになります。

 

以上で、ビジュアルエディタに<Enter>が使えるメモBOXを実装する事ができました。

ビジュアルエディタで画像(img)を挿入する方法

ここでは本文中に画像を挿入する方法、画像に枠を付ける方法、画像のレスポンシブ表示について解説していきます。

1.画像を挿入する方法

画像を取り込む方法は下記の2つの方法があります。

①画像をWordPressのメディア機能を使って取り込む

写真等はこの方法で取り込んでいます。
メディアにある画像を本文中に取り込むには下記アイコンで画像を取り込みます。

 

②OnePress Image Elevator等のプラグインを使って取り込む

­ ­OnePress Image Elevatorのインストールと画像管理

上記のプラグインはクリップボードにある画像をペーストすると本文中に画像が取り込まれます。

また同時にメディアライブにも登録されます。

本サイトでは画面キャプチャ等はこのプラグインで取り込んでいます。

①に比べて非常に簡単に画像が取り込めます。

 

2.画像枠をTinyMCE Advancedのスタイルに登録する

1-1.ビジュアルエディタのCSSに下記を追加します。

本テーマのビジュアルエディタのCSSは「editor-style.css」から「my-editor-style.css」に変更しています。

理由は下記ドキュメントを参照してください。

 ブロックエディタ時代にビジュアルエディタを使う方法

 ­親テーマが「editor-style.css」の時のスタイル機能の使い方

<my-editor-style.cssの設定>

/*************************************************************/
/* image 設定 */
/*************************************************************/
img{
  box-shadow:none;}  /* イメージに影が付くのを削除 */
img.waku0 {
  border-radius:0;
  border:1px solid #8b8682;}
img.waku5 {
  padding: 5px;
  border-radius:0;
  border:1px solid #8b8682;}

※1.イメージに影が付くのをなくす為に box-shadow:noneを入れている。

※2.waku0は、イメージの外側にスペース0を枠線を引く。waku5は、イメージと枠の間に5pxの余白を入れる。

 

1-2.style.cssに同様の設定をする。

/****************************************
Imagesの設定
*****************************************/
.entry-content img{box-shadow:none;}
.entry-content .waku0 {border-radius:0;border:1px solid #8b8682;}
.entry-content .waku5 {padding: 5px;border-radius:0;border:1px solid #8b8682;}

 

3.画像枠の設定方法

項番2の設定で2種類の枠がスタイルに登録されています。

よって画像を選択後、下記アイコンからスタイルを選択します。

img.woku0:画像と枠にスペースがない物

img.waku5:画像と枠に5pxのスペースがある物

 

3-1.img.woku0を選択した例

これはキャプチャ画像等を判り易くするために使っています。

<表示例>

枠を付けると下記になります。

 

3-2.img.waku5を選択した例

これは写真画像等によく使います。

<枠がない画像>

枠を付けると下記になります。

 

4.画像の表示サイズについて

ここでは画像サイズの指定方法によって表示形式が異なる事を説明します。

ブラウザの表示サイズを変更して、下記画像の表示がどの様に変わるか?を試してみてください。

 

4-1.画像サイズの指定の仕方

画像をクリックして、TinyMCEの下記のアイコンをクリックします。

すると下記ダイアロゴが表示されます。

上記は画像サイズが固定で指定されています。

これを下記の様に変更する事も出来ます。

上記は画像サイズを画面サイズ80%にした例です。

 

4-2.画像サイズが640×480の画像

上記画像は画面幅を変えると、画面幅が640pxまでは固定表示、それより小さくなった場合は自動縮小されます。

 

4-32.画像サイズが80%の画像

上記画像は画面幅を変えると、画面幅に応じて画像が縮小されます。

 

5.独自テンプレートを使う場合に注意する事

画像をクリックすると下記メニュが表示されます。

左側のボタンを利用する事により画像表示の位置が指定できます。

・alignleft    :配置位置(左)

・aligncenter:配置位置(中央)

・alignright  :配置位置(右)

・alignnone  :配置位置(なし)

独自テンプレートの場合は上記のクラスが設定されてないので、下記の様な設定が必要になります。

 

5-1.my-editor-style.cssに下記を設定する。

img.alignleft{
	float: left;
	margin: 5px 16px 0 0;margin: 0.3125rem 1rem 0 0;}
img.aligncenter{
	display: block;
	margin-left: auto;
	margin-right: auto;}
img.alignright{
	float:right;
	margin:5px 0 0 10px;margin:0.3125rem 0 0 0.625rem}

※1.aligncenterの場合はブロック要素に変更して左右からの自動位置でセンター配置を実現しています。

 

5-2.style.cssにも同様の設定をします。

 border-radius:0;
	border:1px solid #8b8682;}
.entry-content .img.alignleft{
	float: left;
	margin: 5px 16px 0 0;	margin: 0.3125rem 1rem 0 0;}
.entry-content img.aligncenter{
	display: block;
	margin-left: auto;
	margin-right: auto;}
.entry-content img.alignright{
	float:right;
	margin:5px 0 0 10px;	margin:0.3125rem 0 0 0.625rem}

以上の設定で、独自テンプレートでも画像のハンドリングがうまくできる様になります。