WordPressのテキストエディタで使えるオリジナルクイックタグを作成していきます。クイックタグを使いこなせれば、タグやショートコードの入力の負担が相当減るので、ぜひ、覚えておきたいところです。
この記事では、テキストエディタのクイックタグについて書いています。従って、テキストエディタを使用するためのプラグイン「Classic Editor」の使用が前提となります。
クイックタグの使い方はクイックタグAPIに任せ、この記事では実例とコードの簡単な説明を残しておきます。また、JavaScriptについての解説はしていませんのでご了承ください。
デフォルトのクイックタグを選別する
個人的に使用しないクイックタグを邪魔に感じるので、使うタグだけを残します。
オリジナルのクイックタグを作る
まずは最も簡単なクイックタグを追加してみます。
実際の挙動
少ない文字数ではあまり恩恵を感じられませんが、引数が多いショートコードや、よく使うHTMLタグを登録しておけば、文字入力の負担がかなり減ります。
コード
入力値で結果が変わるクイックタグを作る
次は入力値によって出力結果が変わるものを作ります。
実際の挙動
コード
これ以降、functions.phpのPHP部分を省略し、JavaScript部分のみを抜粋して載せています。
// QTags.addButton(id, ボタンの文字, コールバック関数);
QTags.addButton('unordered_list', 'ul', unordered_list);
function unordered_list(e, c, ed)
{
const num = prompt('リストの数');
if (num === '' || num === null) {
return false;
}
QTags.insertContent(
'<ul>\n' +
' <li></li>\n'.repeat(num) +
'</ul>'
);
return false;
}
エディタで文字選択中と未選択で挙動を変える
エディタの文字選択状態で挙動を変えます。
実際の挙動
コード
// QTags.addButton(id, ボタンの文字, コールバック);
QTags.addButton('heading', 'heading', heading);
function heading(e, c, ed)
{
const level = prompt('見出しレベル');
if (level === '' || level === null) {
return false;
}
// テキストエディタで文字選択中
if (ed.canvas.selectionStart !== ed.canvas.selectionEnd) {
this.tagStart = `<h${level}>`;
this.tagEnd = `</h${level}>`;
QTags.TagButton.prototype.callback.call(this, e, c, ed);
// 文字未選択
} else {
QTags.insertContent(
`<h${level}></h${level}>`
);
}
// console.log(ed.canvas); ブラウザ開発者ツールで確認
return false;
}
インラインフレームを使ってショートコード入力を簡潔化する
最後に、非常に面倒なショートコードの引数入力を簡単にするクイックタグを作ります。最初の方法でも可能ですが、インラインフレームを使った方法がより簡単にショートコードを生成できます。
実際の挙動
WordPressに元々組み込まれているjQueryプラグインThickBoxを使用します。
コード
今までと違って少し複雑になります。
theme_dir/
|-- cli_view_url.php
|-- web_view_url.php
|-- ...
`-- functions.php
今回はiframeでタブを使用しましたが、タブを使わない場合はadd_filter('media_upload_tabs')
などのタブ関連コードは必要ありません。
おわりに
以上で、一通りのクイックタグを作成できるようになりました。
ただ、参考サイト様や海外ブログなどを拝見すると、この記事では使用していないコードなども出てきているので、もっと効率的な書き方ができたり、使える関数などがあるのかもしれません。WordPress本体のソースコードまでたどれば分かるかと思いますが、ひとまず自分が欲しい機能の実装はできたので良しとします。