▼すべてのカテゴリーを見る

【WordPress】会話風の吹き出しを挿入するツールボタンを自作してみた

みやびです。最近は相変わらずPHPの勉強をやりつつ、社長と一緒に新しいブログへの移設やデザイン補修を行っていました。そして昨日の帰り際、社長から新しい要求が降ってまいりました。「WordPressで会話風の吹き出しを入れたい。なるべく簡単に。任せるよ。

プラグインを使わずに自作する

吹き出しを挿入するプラグインとして有名なものとして「Speech Bubble」が挙げられますが、ざっと見たところ、あまりワクワクしなかったのと、これくらい自分でサクっと実装できなきゃね!ってことで、勉強がてら自分で作ってみることにしました。

とは言ったものの、WordPress標準搭載のビジュアルエディタ「Tiny-MCE」をカスタマイズした経験は皆無なので、そこから勉強開始です。

仕方ない。いっちょやってやりますか!

みやびのせるのチョロいわー!

まずは計画を立てる

タイトルの通り、今回の目標は「WordPressで誰でも簡単に記事内に吹き出しを挿入できるような仕組みを実装すること」です。

完成までの道のりをイメージする

これを具体的な機能に落とし込むと、

  1. WordPressの記事編集画面にて、ツールバーにアイコンを追加する
  2. 追加したアイコンをクリックすると、ビジュアルエディタに吹き出しが挿入される
  3. 吹き出しの人物(画像)をメディアライブラリから自由に変更できる
  4. 吹き出し内の会話を自由に編集できる

となります。この4ステップであればWordPress初心者でも簡単に使うことができますね。

どの言語を使用するのか?

こちらが自由に決められるものではありませんが、念のため。

  1. 吹き出しデザイン:HTML・CSS
  2. Tiny-MCEの自作ブラグイン:JavaScript
  3. WordPressへの組み込みと認識:PHP

WordPressで何か新しい機能を実装しようとする場合には、基本的に上述した言語をある程度理解していれば自作・カスタマイズすることが可能です。

実際に作業する順番についてもこれと同様です。

実際に作ってみる!(全コード公開)

前置きが長くなってしまいそうなので、実際に作成して、このブログでも動いているコード・プログラムを公開します

1. HTMLとCSSで吹き出しイメージを具現化する

まずはHTMLとCSSを使って実際に表示されるイメージ(コード・デザイン)を描写してみます。

HTML

CSS

結果

▼左画像/右吹き出し

thumbnail

talk

▼右画像/左吹き出し

talk

thumbnail

編集画面上はこんな感じになってます。

miyabi_plog_balloon_in_editor

(全く同じ内容のCSSをエディタに読み込ませています。方法については後述します。)

いやはや、もうちょっとCSSがきれいに書けるといいなぁと思うのですが、ボタンクリックで出力されるHTMLを最小限にしたかった(後からテキストモードでスタイルをいじりたい人が少しでも分かりやすいように…)という言い訳をしておきます笑

上記CSSでは:nth-child()を使っていますが、それぞれクラスをつけても全然問題ないです。

余談ですが、これを書く前に考えていることはこんな感じ。

  • 左に画像、右に吹き出しが基本かな?
  • 会話になると左右反転バージョンも作らなきゃいけない?
  • 会話内容が10文字でも1000文字でも崩れないようにしなきゃ
  • 画像と吹き出しの割合はどのくらいにしようかな?
  • スマホで見たときは吹き出しは画像の下?それともそのまま横?
  • floatかinline-blockかtableか。上下中央ならvertical middleか。flexでalign-itemsそろそろ使いたいなぁ。
  • etc…

みたいなことが頭の中でごちゃごちゃーっと出てきますが、ひとつずつルールを決定していけば自然と使うべきCSSも見えてきます。

2. Tiny-MCE用の自作プラグインをJavaScriptを書く

この手の情報は海外サイトの方が充実しているので、まずは英語検索しながら苦手なJavaScript周りを1時間ほど見て回りました。

使用しているテーマディレクトリ(wp-content/themes/テーマ名/)の下に新しくディレクトリを作成し(ここではcustom_tiny_mceとしています)、その中に新しくJavaScriptファイルを作成します(ここでは例にならってeditor_plugin.jsとしています)。

また、ツールバーに追加したいアイコン画像はICOOOON MONOなどで入手し、上で作成したcustom_tiny_mceディレクトリ内のJSファイルと同階層に置いてください。

editor_plugin.js

Tiny-MCEの自作プラグインを作成する方法やテンプレート書式なんかは公式サイトにちょこっと記載されています。が、見つけるのも困難な上に理解するのが大変すぎるので、もう少し何とかしてもらいたい…。

上のコードの解説ですが、基本的にプラグイン作成に必要なプログラムはTiny-MCEが提供しているものに準拠する必要があります

ここではその一部を使用していますが、基本的な流れは、

init: function(ed, url)において、edに現在のエディタ情報、urlにこのjsファイルまでのパスが格納されています。

  1. tinymce.create(‘tinymce.plugins.任意のプラグイン名’,{ にてプラグイン名を決定し、
  2. ed.addCommand(‘任意のコマンド名’, function(){ にてコマンド名を設定し、
  3. ed.execCommand(‘mceInsertContent’, false, ‘出力する要素’); にて実行コマンドを指定し、
  4. ed.addButton(‘任意のボタン名’,{ にてツールバーに追加するボタンを指定します。

ざっくりかよ!!

項目3の種類がいくつかあり、期待するアクションに合わせたものを使用します。

これだけではよく分からないと思いますが、全部コピペしてから自分でいろいろいじってみたらだいたい理解できると思います。

3. WordPressに反映させる

WordPressに反映させるためには、使用しているテーマのfunctions.phpに追記します。

functions.php

これも基本のフィルターフックですが、$buttons配列に先ほどed.addButtonで命名・作成したballoon_leftとballoon_rightをmce_buttonsに追加しています。

余談ですが、mce_buttonsの他にmce_buttons_1、mce_buttons_2、mce_buttons_3、mce_buttons_4も利用でき、それぞれツールバーの何行目に表示したいかを表しています。

ここまでの工程が完了したら、記事編集画面を開いてみてください。念のためスーパーリロードで

正常に完了していればツールバーにボタンが追加されているはずです。

↓これね(笑)

balloon-left balloon-right

4. CSSをエディタに適用させる

これはオプションですが、今回の吹き出しコードにはテーブルタグを使用しており、デフォルトだとビジュアルモードで見づらいです。

同様のCSSを反映させたい場合には、対象のCSSコードのみを切り取って新しくファイルを作成(ここでは例にならってeditor-style.cssとします)し、テーマファイルのCSSディレクトリ直下にアップロードしたのち、functions.phpに以下のコードを記載してください。

editor-style.css

これでリロードをかければ、記事編集画面のビジュアルモードにてCSSが反映されるので見やすくなります。

作成した吹き出しの使い方

冒頭の「完成までの道のりをイメージする」に記載した通り、

  1. WordPressの記事編集画面にて、ツールバーにアイコンを追加する
  2. 追加したアイコンをクリックすると、ビジュアルエディタに吹き出しが挿入される
  3. 吹き出しの人物(画像)をメディアライブラリから自由に変更できる
  4. 吹き出し内の会話を自由に編集できる

の要領で使用できます。

アイコンをクリックすると、メディア挿入個所に「thumbnail」、吹き出し入力箇所に「talk」と書いてあるテーブルがカーソル位置に自動挿入されます。

そして、thumbnailをダブルクリックして反転させた状態で、メディアを追加→お好きな画像を「サムネイルサイズ(150 x 150)」で挿入してください。

talk部分は自由に何文字でも入力できます。

以上になりますー

ここまで読んでいただいてありがとうございます。

僕もWeb言語はまだまだ理解できていない部分が多いのですが、コーディングやプログラミングの書き方に「正解はない」です。

昔は100点のコードが書けていないと不安で仕方なかったのですが、最近では、ある程度できればそれでよしとしています(セキュリティ周りに関してはもちろん別です)。

いい加減という意味ではなく、80点を100点にする作業よりも、また新しいものを80点目指して作成・勉強した方がよっぽど勉強になると感じているからです。

中級者から上級者に上がる必要性を感じた時に、じっくり時間をかけてより深く勉強していこうと思います。

要するに、コーディングやプログラミングは楽しみましょうってこと!わかった?

Alrighty!!

akira-icon
面白かったら、役に立ったら、何も感じなかったら「いいね!」してね!

仕事そっちのけで記事を書いた人

プログラムしたりトレードしたりスケートしたりけん玉したりするひと。趣味はトライアンドエラー。優しいときもあれば厳しいときもある。寝不足を基本とする。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です