
記事URLをワンクリックでコピーするショートコード

うさです🐰🌿
最近、うさねこ散歩の記事で「この記事URLをねこちゃんに送りたいけど、URLコピーがちょっと面倒…」
そんな場面があったので、ワンタップでURLをコピーできるオリジナルBOX を作ってみました✨️

よくわかんないけど、便利なら何でも取り入れましょう。

うっ、うん😅
URLコピーって意外と手間だったりするよね。
だからね、
- ボタンを押すだけで URL をコピー
- コピーできたら ポップアップでメッセージ
- スマホでも押しやすい丸ボタン
- 白×ミントのナチュラルデザイン
を全部そろえた「うさねこ専用のコピーBOX」 を作ってみました🌿✨
🌿 今回のURLコピーBOXのポイント
🟢 ワンタップでURLコピー(PC/スマホ対応)
🟢 コピー成功時は淡ミントのポップアップがふわっと登場
🟢 Cocoonに溶け込むやさしい白×ミントデザイン
🟢 コピーしたURLはそのままSNSに貼り付けて使える
🟢 ショートコードなので記事内の好きな場所に置ける
🟢 “usaneko”の部分は全部自由に変更OK(関数名・CSS名・ショートコード名)
🟢 メッセージ文も自由にカスタムできる
カスタマイズを前提とした作りにしてあるので、あなたのサイトカラーに合わせて自由に調整できます。
設置方法(WordPress + Cocoon)
以下の流れで簡単に設置できます。
うさねこ散歩での運用方法(functions.php から呼び出し)
当サイトでは、URLコピーBOXを PHPとCSSを分けて管理するスタイルで運用しています。
その際に採用しているのは、次のような 役割ごとにまとめた構成 です。
*functions.phpには、呼び出ししか入れない
(例:ツールの構成イメージ)
└ 子テーマ(Cocoon Child)
├ functions.php ← ショートコードの登録のみ
└ url_Copy_Tool
├ PHP本体(出力処理)
└ CSS(デザイン)
①PHP ファイルの設置
URLコピープログラムとなる PHPファイル を子テーマ側へ置きます。
- 子テーマ内に「専用フォルダ」を作成
例:url_Copy_Tool - この中にPHP本体(出力処理)をアップロード
② CSS ファイルの設置
次に URLコピーデザインとなる CSSファイル を子テーマ側へ置きます。
- PHP ファイルを設定したフォルダ
- この中にCSS(デザイン)をアップロード
③ PHP(ショートコード本体)の追加
子テーマ(Cocoon Child) → functions.php
この functions.php の中に以下のように「PHPコード」を貼り付けてください。
/**
* 🐰 URLコピー機能(URL-SNS ツール)
* うさねこ専用フォルダからPHPを読み込む
* 必須:ファイルは /url_Copy_Tool/PHP本体(実際の名前に変更)に置くこと
*/
require_once get_stylesheet_directory() . '/PHP本体(実際の名前に変更)';
④ 記事でショートコードを呼び出す
記事の好きな場所に次を入れるだけで表示されます。
[usaneko_url_sns]
※「usaneko」の部分はPHP・CSSの変更に合わせて自由に変更してOKです。
PHPコード
※「usaneko」の部分は自由に変更してOKです。(関数名/ショートコード名/CSS読込パス)
<?php
if (!defined('ABSPATH')) exit;
/**
* 🐰🐱 UsaNeko URL Copy Box(URL-SNS 最新版)
* ----------------------------------------------------
* ■ このショートコードについて
* ・[usaneko_url_sns] を WordPress に貼ると、
* 「記事URLをコピーするボタン」+「成功モーダル」が表示されます。
*
* ■ 表示内容
* 1) 上部 … 白背景 × ミント枠の説明ボックス
* 2) 中央 … ミント色の「URLコピー」ボタン
* 3) 下部 … コピーに成功したら出る白背景 × ミント枠のモーダル
*
* ■ 動作
* ・navigator.clipboard.writeText() でURLをコピー
* ・成功時のみ、かわいいモーダルが表示される
*
* ■ 注意
*
*/
function usaneko_url_sns_output() {
/* ---------------------------------------------
* ★ 現在のページURLを取得
* --------------------------------------------- */
$url = get_permalink(); // 記事のパーマリンク(URL)
$url_js = esc_js($url); // JS内に安全に埋め込むためのエスケープ
$uniq_id = 'usaneko-URL-SNS-' . uniqid(); // 複数設置でも衝突しないように一意のID生成
ob_start(); // ショートコードのHTMLをため込む
/* ---------------------------------------------
* ★ CSS 読み込み(キャッシュ回避のバージョン付き)
* --------------------------------------------- */
echo '<link rel="stylesheet" href="' .
esc_url(get_stylesheet_directory_uri() . '/inc_URL_SNS_2026/usaneko-url-sns-style.css?ver=20260101') .
'" />';
?>
<!-- 全体のラッパー(ユニークIDを付与) -->
<div class="usaneko-URL-SNS-wrap" id="<?php echo esc_attr($uniq_id); ?>">
<!-- 白背景 × ミント枠の説明ボックス -->
<div class="usaneko-URL-SNS-textbox">
🐰🐱 このページのURL、よかったらコピーして残しておきませんか?📋
</div>
<!-- ミント色のコピー実行ボタン -->
<button type="button" class="usaneko-URL-SNS-btn" data-url-sns-open>
このページのURLをコピーする❤️
</button>
</div>
<!-- ▼ コピー成功時に出るモーダル(最初は非表示) -->
<div class="usaneko-URL-SNS-modal usaneko-URL-SNS-hidden-force"
id="usaneko-URL-SNS-modal-<?php echo esc_attr($uniq_id); ?>">
<div class="usaneko-URL-SNS-modal-content">
<!-- モーダルのタイトル部分 -->
<div class="usaneko-URL-SNS-modal-title">🐰🐱 コピーできたよ!</div>
<!-- 説明文 -->
<p class="usaneko-URL-SNS-modal-text">
URLをクリップボードに保存しました💚<br>
いつでも貼り付けて使えるよ✨
</p>
<!-- 閉じるボタン -->
<button class="usaneko-URL-SNS-modal-btn-ok" data-url-sns-close>OK</button>
</div>
</div>
<script>
(function(){
/* ---------------------------------------------
* ★ JSで操作する要素を取得
* --------------------------------------------- */
// ショートコードの基準となる要素
var base = document.getElementById('<?php echo esc_js($uniq_id); ?>');
if (!base) return; // 念のため安全化
// モーダル本体
var modal = document.getElementById('usaneko-URL-SNS-modal-<?php echo esc_js($uniq_id); ?>');
// 開くボタン(URLコピーするボタン)
var openBtn = base.querySelector('[data-url-sns-open]');
// モーダル内の閉じるボタン(複数の可能性もあるためまとめて取得)
var closeBtns = modal.querySelectorAll('[data-url-sns-close]');
// コピーするURL(PHPからJSへ安全に受け渡した文字)
var pageURL = '<?php echo $url_js; ?>';
/* ---------------------------------------------
* ★ 初期状態:モーダルは必ず非表示にする
* --------------------------------------------- */
document.addEventListener("DOMContentLoaded", function() {
modal.classList.add('usaneko-URL-SNS-hidden-force'); // 強制非表示
modal.classList.remove('active'); // activeクラスも削除
});
/* ---------------------------------------------
* ★ URLをコピーして、成功したらモーダルを表示
* --------------------------------------------- */
openBtn.addEventListener('click', async function(){
try {
// navigator.clipboard… を使ってURLをコピー
await navigator.clipboard.writeText(pageURL);
// ▼ コピー成功! モーダルを開く
modal.classList.remove('usaneko-URL-SNS-hidden-force');
modal.classList.add('active');
} catch(e){
// ▼ コピーに失敗したときのフォールバック(環境依存)
alert("コピーに失敗しました…手動でコピーしていただけると助かります。");
}
});
/* ---------------------------------------------
* ★ モーダルを閉じる(OKボタン)
* --------------------------------------------- */
closeBtns.forEach(btn => {
btn.addEventListener('click', function(){
modal.classList.remove('active'); // 表示クラス削除
modal.classList.add('usaneko-URL-SNS-hidden-force'); // 完全非表示へ
});
});
})();
</script>
<?php
return ob_get_clean(); // ショートコードのHTMLを返す
}
add_shortcode('usaneko_url_sns', 'usaneko_url_sns_output');
?>
CSSコード
※ファイル名・クラス名の「usaneko」部分も自由に変更可能です。
/* =========================================================
🐰 強制非表示(ページ読み込み時にモーダルが出ない保険)
---------------------------------------------------------
ここは「モーダルが勝手に表示されないようにする」ための
初期状態のスタイルです。
JSで .active が付くまでは絶対に表示されません。
========================================================= */
.usaneko-URL-SNS-hidden-force {
display: none !important;
opacity: 0 !important;
pointer-events: none !important;
z-index: -9999 !important;
}
/* =========================================================
🐰 ラッパ全体
---------------------------------------------------------
・中央寄せ+全体ブロックの余白調整
・ボタンも説明文もこの中に入る
========================================================= */
.usaneko-URL-SNS-wrap {
margin: 40px auto !important;
text-align: center !important; /* ボタンなど中身を全部中央寄せ */
width: 100% !important;
}
/* =========================================================
🐰 説明文のボックス
---------------------------------------------------------
・白背景+ミントのやわらかい枠線
・うっすら縦グラデーション
・影付きで「ふわっと浮いて見える」感じ
========================================================= */
.usaneko-URL-SNS-textbox {
margin: 12px auto 20px !important;
padding: 18px 22px !important;
max-width: 850px !important;
background: linear-gradient(to bottom, #f3fff5, #ffffff) !important;
border: 2px solid #b8e6c2 !important; /* ミント枠 */
border-radius: 18px !important;
color: #365241 !important; /* 深めの緑グレー(読みやすい) */
font-size: 1.18rem !important;
font-weight: 500 !important;
line-height: 1.6 !important;
text-align: center !important;
box-shadow: 0 4px 12px rgba(0,0,0,0.06) !important;
display: block !important;
position: relative !important;
z-index: 1 !important;
}
/* =========================================================
🐰 コピー実行ボタン(ミント色・丸ボタン)
---------------------------------------------------------
・中央に配置
・指を置きやすい丸形
・hover で少し色が濃くなって気持ちいいUI
========================================================= */
.usaneko-URL-SNS-btn {
padding: 14px 30px !important;
border-radius: 30px !important;
background: #e8ffe8 !important;
border: 1px solid #9ed0a3 !important;
color: #285036 !important;
cursor: pointer !important;
font-size: 1.05rem !important;
font-weight: 600 !important;
transition: 0.2s !important;
/* 中央配置の決め手 */
display: inline-block !important;
margin: 0 auto !important;
}
/* hover(マウスを載せた時) */
.usaneko-URL-SNS-btn:hover {
background: #d9f8d9 !important;
}
/* =========================================================
🐱 モーダルの背景(黒の半透明)
---------------------------------------------------------
・画面全体を覆う
・中央に白いモーダルを置くための “舞台”
========================================================= */
.usaneko-URL-SNS-modal {
position: fixed !important;
top: 0 !important;
left: 0 !important;
width: 100% !important;
height: 100% !important;
background: rgba(0,0,0,0.45) !important; /* 半透明の黒 */
display: none !important; /* 初期は絶対非表示 */
justify-content: center !important; /* 中央に配置 */
align-items: center !important;
z-index: 999999 !important;
padding: 20px !important;
}
/* ---------------------------------------------------------
🐱 モーダル表示ON
---------------------------------------------------------
JSで .active が付いた時に登場
display:flex で中央に配置される
--------------------------------------------------------- */
.usaneko-URL-SNS-modal.active {
display: flex !important;
animation: URLSNSfadeIn 0.25s ease-out !important;
}
/* フェードインアニメーション */
@keyframes URLSNSfadeIn {
from { opacity: 0; }
to { opacity: 1; }
}
/* =========================================================
🐱 モーダルの本体(白背景 × ミント枠)
---------------------------------------------------------
・ポップアニメ付き
・影付きでかわいく浮く感じに
========================================================= */
.usaneko-URL-SNS-modal-content {
background: #ffffff !important; /* 白背景 */
border: 2px solid #b8e6c2 !important; /* ミント枠 */
border-radius: 18px !important;
padding: 24px !important;
max-width: 380px !important;
width: 100% !important;
box-shadow: 0 8px 18px rgba(0,0,0,0.18) !important;
text-align: center !important;
animation: URLSNSpop 0.25s ease-out !important; /* ふわっポップ */
}
/* ポップアニメーション */
@keyframes URLSNSpop {
0% { transform: scale(0.85); opacity: 0; }
100% { transform: scale(1); opacity: 1; }
}
/* タイトル文(大きく・強め) */
.usaneko-URL-SNS-modal-title {
font-size: 1.25rem !important;
font-weight: 700 !important;
color: #3b523b !important;
margin-bottom: 12px !important;
}
/* 説明文(読みやすいサイズ) */
.usaneko-URL-SNS-modal-text {
font-size: 1rem !important;
color: #445544 !important;
margin-bottom: 18px !important;
line-height: 1.6 !important;
}
/* OKボタン(ミント丸ボタン) */
.usaneko-URL-SNS-modal-btn-ok {
padding: 10px 26px !important;
border-radius: 30px !important;
border: 1px solid #9ed0a3 !important;
background: #e8ffe8 !important;
color: #285036 !important;
cursor: pointer !important;
font-size: 1rem !important;
font-weight: 600 !important;
transition: 0.2s !important;
}
/* hover(マウスを載せた時) */
.usaneko-URL-SNS-modal-btn-ok:hover {
background: #d9f8d9 !important;
}
/* =========================================================
📱 スマホ対応(最大480px)
---------------------------------------------------------
・文字を少し小さめに
・余白を調整して読みやすく
========================================================= */
@media (max-width: 480px) {
.usaneko-URL-SNS-textbox {
font-size: 1rem !important;
padding: 14px 16px !important;
margin: 10px 12px 18px !important;
}
.usaneko-URL-SNS-btn {
width: 100% !important;
max-width: 340px !important;
padding: 12px 18px !important;
font-size: 1rem !important;
}
.usaneko-URL-SNS-modal-content {
padding: 20px !important;
border-radius: 14px !important;
margin: 0 10px !important;
}
}
🍀 まとめ

この「URLコピーBOX」は、という、読者さんにやさしい便利ショートコードです🐰💚
ブログの見やすさ・使いやすさがちょっとアップするので、標準機能とは別に作りたい方は、ぜひあなたのサイトにも置いてみてくださいね🌿✨
WordPress+Cocoonを始めるなら「エックスサーバー」がおすすめ!
「これからWordPress+Cocoonでブログを作りたい!」という方には、
国内シェアNo.1の高速レンタルサーバー エックスサーバーがぴったりです。
- 🚀 WordPressクイックスタート対応(最短10分でブログ開設)
- 🪄 Cocoonテーマの自動インストールにも対応
- 🔒 無料独自SSL/高セキュリティ/自動バックアップ完備
- ☁️ 高速SSD・安定稼働率99.99%以上
- 💰️ スタンダード 月額料金 990円~ 693円~(キャンペーン中なら) 2025/11現在
「WordPress × Cocoon」を最もスムーズに始められる環境が整っています。
👉 今すぐチェック:レンタルサーバー エックスサーバー
免責事項
本記事のサンプルプログラムは動作・結果を保証するものではありません。 利用により発生したいかなるトラブル・損害についても、当方は責任を負いません。
