説明
5.2の新機能「サイトヘルス情報」では、現状のサイト情報をクリップボードにコピーする機能がある。この機能の実装方法を調べてみると、clipboard.jsが利用されていた。
サイト情報のコピー機能
まずは「サイトヘルス情報」ページを開いて、サイト情報のコピー機能がどのように実装されているのか調べていく。この機能としては「サイト情報をクリップボードにコピー」ボタンがクリックされると、サイト情報がクリップボードにコピーせれる仕組みである。
このボタン部分をブラウザの開発者向け機能で確認すると、data-clipboard-text属性にサイト情報が丸ごと入っていることがわかる。
<button type="button" class="button copy-button" data-clipboard-text="`
### wp-core ###
version: 5.2
site_language: ja
user_language: ja
(省略)
`">
<span class="success" aria-hidden="true">コピーしました。</span>
これに対し、/wp-admin/js/site-health.jsを覗いてJavaScript側がどのようになっているかを確認。次は関連する部分を抜粋したものとなる。
var clipboard = new ClipboardJS( '.site-health-copy-buttons .copy-button' );
clipboard.on( 'success', function( e ) {
var $wrapper = $( e.trigger ).closest( 'div' );
$( '.success', $wrapper ).addClass( 'visible' );
wp.a11y.speak( __( 'Site information has been added to your clipboard.' ) );
} );
ClipboardJSクラスのインスタンスを生成し、'success'イベントでspan要素に対して操作している。肝となるクリップボードに対してテキストをコピーする部分はまったく見えない仕様のようだ。続いて、ClipboardJSクラスが定義されているファイルを調べると、/wp-includes/js/clipboard.jsが見つかった。
このclipboard.jsは、/wp-includes/script-loader.phpにて次のように登録されている。
$scripts->add( 'clipboard', "/wp-includes/js/clipboard$suffix.js", array(), false, 1 );
(省略)
$scripts->add( 'site-health', "/wp-admin/js/site-health$suffix.js", array( 'clipboard', 'jquery', 'wp-util', 'wp-a11y', 'wp-i18n' ), false, 1 );
clipboard.jsのハンドル名は'clipboard'として、site-health.jsはこの'clipboard'に依存する指定でハンドル名'site-health'として登録されている。
実際に使ってみた
実際にプラグインで使う場合はまず wp_enqueue_script関数を使用する。
if ( wp_script_is( 'clipboard', 'registered' ) ) {
wp_enqueue_script( 'clipboard' );
}
HTML側はクリップボードにコピーする内容が決まっている場合は次のような感じになる。クリック対象の要素は、サイトヘルス機能のようにbutton要素でもよいが、その他の要素でも問題はなく、ここではspan要素を使っている。
<span class="dashicons dashicons-clipboard" data-clipboard-text="コピーする内容をここに!"></span>
クリップボードにコピーした際に表示を変更するようなことをしないのであればコードは1行でよい。
const clipboard = new ClipboardJS( '.dashicons-clipboard' );
応用例
HTMLを出力する際にコピーする内容が決まっていない場合は、data-clipboard-text属性ではなく、data-clipboard-target属性を使用すればよい。
<textarea id="memo"></textarea>
<span class="dashicons dashicons-clipboard" data-clipboard-target="#memo"></span>
この例であれば、クリック時にtextarea#memoの入力内容がクリップボードにコピーすることができる。
以上のように、clipboard.js(ClipboardJSクラス)はシンプルなコーディングでクリップボードのコピー機能を実装できる。Zeno Rochaさん、ありがとう。
最終更新 : 2019年05月15日 12:59
関連
お勧め
テキストエディタの文字を変更する(2018年5月27日 更新)
テキストエディタ(投稿ページの「テキスト」タブのエディタ)に標準では備わっていない機能を追加する自作プラグイン「html entities button」がほぼ1年ぶりにアップデート。ここではバージョン2.0.0で追加したテキストエディタのフォント切り替え機能について紹介する。
query_posts(WP_Queryクラス)でカスタムフィールドを使う(2011年9月15日 更新)
先週3回にわたってtax_queryパラメータを使ったカテゴリーや投稿タグ、投稿フォーマットの絞り込みを整理したが、その途中で目に付いたのが'meta_query'パラメータ。この'meta_query'パラメータは、カスタムフィールドの絞り込み条件を指定するためのもので、3.2で登場した新しいパラメータのようだ。更新ボタンの横にスピナーを実装する(2019年5月14日 更新)
WordPressの管理画面ではAJAXを使って何らかの処理を行う際、数秒間の空き時間にアイコンがクルクル回る「スピナー」を表示しているところがある。今作っているプラグインでこの「スピナー」を使いたくなったので、実装方法を調べてみた。
公式ディレクトリに登録するならajax.googleapis.comのライブラリは利用しない(2018年5月27日 更新)
数日前、投稿一覧ページの絞り込みドロップダウンメニューを複数選択可能にするプラグイン「Posts filter multiselect」を公開したのですが、その際に指摘されたポイントを紹介します。
Login rebuilder 2.3.0の新機能を紹介(2018年5月27日 更新)
プラグイン「Login rebuilder」はログイン時の履歴(ログ)や不正なログインページへのアクセス履歴を保存している。これらの履歴情報はダッシュボートで確認できるが、バージョン2.3.0においてそれぞれがダウンロードできるようになった。