じゃんけんゲームをショートコードで表示する方法
目次
この記事では、WordPressに「じゃんけんゲーム」を設置し、投稿ページのみで表示されるようにする方法を紹介します。
固定ページ・カテゴリー・お知らせなどには一切影響せず、投稿記事だけで動作します。
ショートコード [janken_game] を使えば、どの記事でも簡単に設置できます。
1 実装のポイント
- ショートコード
[janken_game]で呼び出せる - 投稿ページ (
is_single()) でのみ実行 - JavaScriptで勝敗判定を行う
- CSSでデザイン調整
2 functions.php にコードを追加
注意: 必ず子テーマの functions.php に追加してください。親テーマに直接追加するとアップデートで消える可能性があります。
//-------------------------------------------
// じゃんけんゲーム(投稿ページ限定・1回だけ遊べる版・日本時間対応)
//-------------------------------------------
function my_janken_game_shortcode() {
ob_start();
?>
<div id="janken-game">
<h3>じゃんけんゲーム</h3>
<p>あなたの手を選んで!!</p>
<div class="janken-buttons">
<button onclick="playJanken('グー')"> グー</button>
<button onclick="playJanken('チョキ')"> チョキ</button>
<button onclick="playJanken('パー')"> パー</button>
</div>
<p id="janken-result"></p>
</div>
<script>
(function () {
const resultEl = document.getElementById("janken-result");
// -----------------------------
// 戦績データの管理(localStorage利用)
// -----------------------------
function getStats() {
const data = localStorage.getItem("janken_stats");
return data ? JSON.parse(data) : { win: 0, lose: 0, draw: 0, lastPlay: "" };
}
function saveStats(stats) {
localStorage.setItem("janken_stats", JSON.stringify(stats));
}
// -----------------------------
// 日本時間で日付を取得
// -----------------------------
function getTodayJST() {
const now = new Date();
const jstOffset = 9 * 60 * 60 * 1000; // UTC+9時間
const jstDate = new Date(now.getTime() + jstOffset);
return jstDate.toISOString().slice(0, 10); // YYYY-MM-DD形式を返す
}
// -----------------------------
// 1日1回制限チェック(日本時間基準)
// -----------------------------
function canPlayToday(stats) {
const today = getTodayJST();
return stats.lastPlay !== today;
}
// -----------------------------
// メイン関数
// -----------------------------
window.playJanken = function (playerHand) {
const stats = getStats();
const today = getTodayJST(); // 日本時間の日付を使用
if (!canPlayToday(stats)) {
resultEl.innerHTML =
"今日はすでにプレイ済みです!<br>明日また挑戦してください。<br><br>" +
"現在の戦績:<br>勝ち:" + stats.win + " 負け:" + stats.lose + "<br>引き分け:" + stats.draw;
return;
}
const hands = ["グー", "チョキ", "パー"];
const computerHand = hands[Math.floor(Math.random() * 3)];
let result = "";
if (playerHand === computerHand) {
result = "あいこです!";
stats.draw++;
} else if (
(playerHand === "グー" && computerHand === "チョキ") ||
(playerHand === "チョキ" && computerHand === "パー") ||
(playerHand === "パー" && computerHand === "グー")
) {
result = "あなたの勝ち!";
stats.win++;
} else {
result = "あなたの負け…";
stats.lose++;
}
stats.lastPlay = today;
saveStats(stats);
resultEl.innerHTML =
"あなた:" + playerHand +
"<br>コンピュータ:" + computerHand +
"<br><strong>" + result + "</strong><br><br>" +
"現在の戦績:<br>勝ち:" + stats.win + " 負け:" + stats.lose + "<br>引き分け:" + stats.draw;
};
})();
</script>
<?php
return ob_get_clean();
}
add_shortcode('janken_game', 'my_janken_game_shortcode');
補足:
- CSSとJSは子テーマ(または現在のテーマ)にファイルとして追加してください。
- ショートコード
- CSSとJSは子テーマ(または現在のテーマ)にファイルとして追加してください。
- ショートコード
[janken_game] を記事本文に貼るだけで動作します。
3 javascript にコードを追加
ファイル名:janken.js
保存先:wp-content/themes/child-theme/js/janken.js
//-------------------------------------------
// じゃんけんゲームの勝敗ロジック
//-------------------------------------------
function playJanken(playerHand) {
const hands = ["グー", "チョキ", "パー"];
const computerHand = hands[Math.floor(Math.random() * 3)];
let result = "";
if (playerHand === computerHand) {
result = "あいこです!";
} else if (
(playerHand === "グー" && computerHand === "チョキ") ||
(playerHand === "チョキ" && computerHand === "パー") ||
(playerHand === "パー" && computerHand === "グー")
) {
result = "あなたの勝ち!";
} else {
result = "あなたの負け…";
}
document.getElementById("janken-result").innerHTML =
"あなた:" + playerHand + "<br>コンピュータ:" + computerHand + "<br><strong>" + result + "</strong>";
}
3.1 ディレクトリ構造
- child-theme/
- archive.php
- category.php
- functions.php
- footer.php
- header.php
- style.css
- js/
- janken.js
ウィジェット、記事内で表示する場合:
[janken_game]
4 汎用CSS
/* -----------------------------
* じゃんけんゲーム共通スタイル
*----------------------------- */
#janken-game { /** じゃんけんゲーム全体のコンテナ **/
background: #f7f7f7; /** 背景色を明るいグレーに設定 **/
border: 2px solid #0073aa; /** 外枠を青色の2px線に設定 **/
border-radius: 10px; /** 角を10px丸くする **/
padding: 20px; /** 内側に20pxの余白を設定 **/
text-align: center; /** コンテンツを中央揃えにする **/
max-width: 350px; /** 幅の最大値を350pxに制限 **/
margin: 20px auto; /** 上下20px、左右自動で中央寄せ **/
box-shadow: 0 2px 8px rgba(0,0,0,0.1); /** 薄い影を付けて浮き上がらせる **/
}
#janken-game h3 { /** じゃんけんゲーム内の見出し(タイトル) **/
margin-top: 0; /** 上の余白を0にする **/
color: #0073aa; /** タイトル文字を青色にする **/
font-weight: bold; /** 太字に設定 **/
}
.janken-buttons button { /** 各じゃんけんボタンのスタイル **/
margin: 4px; /** ボタン間に4pxの間隔を設定 **/
padding: 10px 10px; /** 内側余白を上下左右10pxずつ設定 **/
font-size: 16px; /** ボタン文字のサイズを16pxに設定 **/
border: none; /** 枠線を消す **/
border-radius: 5px; /** 角を5px丸くする **/
cursor: pointer; /** マウスカーソルをポインターに変更 **/
transition: .2s; /** ホバー時のアニメーションを0.2秒で実行 **/
font-family: "Segoe UI Emoji", "Noto Color Emoji", "Apple Color Emoji", sans-serif; /** 絵文字フォントを優先して使用 **/
}
.janken-buttons button:hover { /** ボタンにマウスを乗せたときのスタイル **/
background: #0073aa; /** 背景色を青に変更 **/
color: #fff; /** 文字色を白に変更 **/
}
#janken-result { /** 結果表示エリアのスタイル **/
margin-top: 15px; /** 上に15pxの余白を付ける **/
font-weight: bold; /** 太字にする **/
font-size: 18px; /** 文字サイズを18pxに設定 **/
}
補足:
- この「じゃんけんゲーム」のプレイ記録(勝敗や1日1回制限)は、ブラウザの
- 次の操作を行うと、保存された記録が消えてリセットされます。
- ブラウザの設定で「サイトデータ」や「Cookie・キャッシュ」を削除した場合
- シークレットモード(プライベートブラウズ)でアクセスした場合
- 別のブラウザや別の端末でアクセスした場合
- localStorage を手動で削除した場合(開発者ツールで削除など)
- この「じゃんけんゲーム」のプレイ記録(勝敗や1日1回制限)は、ブラウザの
localStorage に保存されています。- 次の操作を行うと、保存された記録が消えてリセットされます。
- ブラウザの設定で「サイトデータ」や「Cookie・キャッシュ」を削除した場合
- シークレットモード(プライベートブラウズ)でアクセスした場合
- 別のブラウザや別の端末でアクセスした場合
- localStorage を手動で削除した場合(開発者ツールで削除など)
※ 同じ端末・同じブラウザで通常閲覧している限り、記録は保持されます。
※ 記録が消えると「1日1回制限」もリセットされ、再びプレイ可能になります。
5 完成イメージ
右上にあります。
6 代用プラグイン
同様のゲームを実装したい場合、「Shortcoder」や「Insert PHP Code Snippet」でもショートコード登録が可能です。
ただし、PHP直接編集(functions.php)よりも管理は簡単ですが、パフォーマンスはやや劣ります。
7 まとめ
- ショートコード
[janken_game]で簡単に設置できる - CSSとJSで自由にカスタマイズ可能
これで、WordPress投稿ページにだけ反映される「じゃんけんゲーム」が完成します。
シンプルながら動作も軽く、読者とのインタラクティブな交流にも活用できます。


