皆さま引き続きコロナには気をつけてお過ごしください!

【WordPress】画面に表示したカスタムフィールド値をボタンクリックでコピーしよう

カスタムフィールド WordPress


前回、カスタムフィールドとショートコードを使って、JavaScriptの影響を受けずにコードを表示できるようにしました。

 

にゃこ
コードをコピーして使いたい

 

と思っていただいたとして、

前回の表示ですと、マウス等を動かして、コードを選んでコピーしなければなりませんでした。

短ければまだしも、

コードが長かったら、大変ですね。

 

今回は、ボタン1つでコード(div内のテキスト)がコピーできるようにしたいと思います。

 

スポンサーリンク

処理の流れ

ボタン1つでコード(div内のテキスト)がコピーできるようにするには、以下の流れで処理をさせる必要があります。

①div内のテキストを選択する。

②選択範囲をコピーする。

 

上記をボタンクリックでできるようにするため、以下2点の追加が必要となります。

  • HTMLにボタンを追加
  • ボタンで呼び出すJavaScriptを追加

 

まずはJavaScriptの作り方から確認したいと思います。

 

スポンサーリンク

JavaScriptを追加しよう

JavaScriptの追加手順

Simple Custom CSS and JSプラグインを利用し、JavaScriptを追加します。

①Simple Custom CSS and JSプラグインで、「カスタム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つの問題点があります。

①IDを使ってコピーしているため、コピーボタンが複数あっても最初の1つ目しかコピーできない。

②カスタムフィールドの半角スペースを無視してしまうため、画面上と、コピー結果はインデントがない状態になってしまう。

 

にゃこ
まだ問題点があるにゃ~

 

スポンサーリンク

まとめ

画面にコピー項目が1つの場合は、問題なく利用できますので、

よければ活用ください★

 

現在の問題点については、

後日対応して、また掲載したいと思います。

タイトルとURLをコピーしました