前回、カスタムフィールドとショートコードを使って、JavaScriptの影響を受けずにコードを表示できるようにしました。
と思っていただいたとして、
前回の表示ですと、マウス等を動かして、コードを選んでコピーしなければなりませんでした。
短ければまだしも、
コードが長かったら、大変ですね。
今回は、ボタン1つでコード(div内のテキスト)がコピーできるようにしたいと思います。
処理の流れ
ボタン1つでコード(div内のテキスト)がコピーできるようにするには、以下の流れで処理をさせる必要があります。
①div内のテキストを選択する。
②選択範囲をコピーする。
上記をボタンクリックでできるようにするため、以下2点の追加が必要となります。
- HTMLにボタンを追加
- ボタンで呼び出すJavaScriptを追加
まずはJavaScriptの作り方から確認したいと思います。
JavaScriptを追加しよう
JavaScriptの追加手順
※Simple Custom CSS and JSプラグインを利用し、JavaScriptを追加します。
①Simple Custom CSS and JSプラグインで、「カスタムJSの追加」をクリックする。

②任意のタイトルをつけ、以下コードを追加する。
function copy(){
//範囲を指定
let range = document.createRange();
let cpdata = document.getElementById('cpbtn');
range.selectNodeContents(cpdata);
//指定した範囲を選択状態にする
let selection = document.getSelection();
selection.removeAllRanges();
selection.addRange(range);
//コピー
document.execCommand('copy');
selection.removeAllRanges();
alert('コピーしました');
}
③オプションの表示位置を「フッター」にし、「公開」ボタンをクリックする。
コードの意味を確認しよう
追加したJavaScriptの意味を確認しておきましょう。
- function copy(){
- ~~~
- }
copyという関数を作成しています。
- let range = document.createRange();
createRange()で、空の範囲を作成しています。
- let cpdata = document.getElementById(‘cpbtn’);
cpbtnという名前の要素を取得し、cpdataに格納します。
- range.selectNodeContents(cpdata);
引数で渡されたデータを選択します。
- let selection = document.getSelection();
選択した範囲をselection に格納します。
- selection.removeAllRanges();
念のため、全ての選択範囲を一度解除します。
- selection.addRange(range);
範囲を選択し、selectionに追加します。
- //コピー
- document.execCommand(‘copy’);
選択している文字列をコピーします。
- alert(‘コピーしました’);
画面上に「コピーしました」の文字をポップアップ表示させます。
投稿画面にコピーボタンを追加しよう
設定したJavaScriptを呼び出すボタンを投稿画面に設定します。
ボタンの追加手順
①投稿画面を開き、ボタンを入れたい場所で以下コードを追加する。
<button class="btn-square-slant" type="button">クリップボードへコピー</button>
※<>は半角に変えてください。
②カスタムフィールドを呼び出すショートコードの前に以下を追記する。
<div id="cpbtn" class="in_code">
③カスタムフィールドを呼び出すショートコードの後ろに以下を追記する。
</div>
ボタンのデザインを変更しよう
必要に応じて、ボタンのデザインを変えましょう。
JavaScriptの追加手順
※Simple Custom CSS and JSプラグインを利用し、JavaScriptを追加します。①Simple Custom CSS and JSプラグインで、「カスタムCSSの追加」をクリックする。
②任意のタイトルをつけ、以下コードを追加する。
.btn-square-slant {
display: inline-block;
position: relative;
padding: 0.5em 1.4em;
text-decoration: none;
background: #668ad8;/*ボタン色*/
color: #FFF;
border-bottom: solid 5px #36528c;/*ボタン色より暗めに*/
border-right: solid 5px #5375bd;/*ボタン色より暗めに*/
}
.btn-square-slant:before {
content: " ";
position: absolute;
bottom: -5px;
left: -1px;
width: 0;
height: 0;
border-width: 0 6px 6px 0px;
border-style: solid;
border-color: transparent;
border-bottom-color: #FFF;
}
.btn-square-slant:after {
content: " ";
position: absolute;
top: -1px;
right: -5px;
width: 0;
height: 0;
border-width: 0px 6px 6px 0px;
border-style: solid;
border-color: #FFF;
border-bottom-color: transparent;
}
.btn-square-slant:active {
/*ボタンを押したとき*/
border:none;
-webkit-transform: translate(6px,6px);
transform: translate(6px,6px);
}
.btn-square-slant:active:after, .btn-square-slant:active:before {
content: none;/*ボタンを押すと線が消える*/
}
③オプションの表示位置を「フッター」にし、「公開」ボタンをクリックする。
※btn-square-slantは、投稿画面で設定したボタンにつけたクラス名です。
クラス名を変更した場合は、CSS側でも変更してください。
この方法の問題点
投稿画面に表示したカスタムフィールドの値をコピーできるようになりましたが、
以下2つの問題点があります。
まとめ
画面にコピー項目が1つの場合は、問題なく利用できますので、
よければ活用ください★
現在の問題点については、
後日対応して、また掲載したいと思います。

