PHP+jsでページ遷移なしのお手軽ワンクリック投票ボタンを設置しましたので、設置方法について簡単にご紹介します。
完成イメージ
このような読者が、クリックして簡単に投票することができる投票ボタンを作ります。
スマホ表示時(レスポンシブ)
仕様
・ワンクリックで投票。
・ページ遷移はしない
・クリック後、即時投票結果が反映
・投票結果はサーバーに蓄積
・投票結果をボタンに表示する
・クリックしたあとに、追加メッセージが表示される
・クリック後は、次回訪問時まで投票できない(セッション単位)
※記事下の現在設置のボタンは、何度でもクリックできる仕様に変更しています。
・月別の投票結果をレポートする(Googleアナリティクス)
設置方法/Wordpressに実装方法
1.javascriptの格納
テンプレートのjsフォルダに以下のjavascriptファイルを格納します。
・vote.js
・html5.js
・jQuery ※通常wordpress標準で持っているので不要
vote.jsは私がカスタマイズしていますので、以下よりダウンロードしてください。
※vote.js.txt → vote.jsに変更して使用します。
'/wp/vote.php'部分は、'/vote.php'に変更の必要あり。ディレクトリにあわせて調整してください。
vote.js
getElementsByClassNameメソッド - JavaScript ライブラリー - HTML5.JP
www.html5.jp/library/dom_getElementsByClassName.html
2.fileフォルダの作成、パーミッション設定
ドメイン直下にfileフォルダを作成します。
アクセス権限は、777(読み書き可能)にしてください。
このフォルダ内に投票結果記録ファイルが作成されます。
3.vote.phpの格納
スクリプトファイル(vote.php)をドメイン直下に配置します。
ファイルは以下よりダウンロードしてください。※vote.php.txt → vote.phpに変更して使用します。
ファイル内のsetcookie部分は、有効期限設定を調整可能です。
vote.php
4.単一記事の編集
格納したjavascriptを読み込むように記述します。ディレクトリパスは調整してください。
<!-- 投票用スクリプト -->
<script type="text/javascript" src="<?php bloginfo('template_url'); ?>/js/html5jp/dom/getElementsByClassName.js"></script>
<script type="text/javascript" src="<?php bloginfo('template_url'); ?>/js/vote.js"></script>
単一記事テンプレート(single.php)に以下のスクリプトを記述します。
記事が読み込まれたあとに記述するとよいです。
<?php
// 投票数取得関数
function getVoteCount($id) {
$filename = "./file/".$id.".cnt";//fileディレクトリ指定
$fp = @fopen($filename, "r");
if ($fp) { $vote = fgets($fp, 9182)."票"; } else { $vote = ""; }
return $vote;
}
?>
<div id="vote_area1" class="clear-fix" style="disply:block;">
<p>この記事はいかがでしたか?</p>
<!-- ページ名取得 -->
<?php $page_name = "post-".$post->ID; ?>
<!-- 投票ボタン1 -->
<div class="votebox votebox1">
<a href="javascript:void(0);" onclick="Vote(<?php echo "'".$page_name."_vote1'" ?>, 'cntClass1');" class="vote" title="">(知)参考になった
<span class="cntClass1"><?php echo getVoteCount($page_name."_vote1"); ?></span></a>
</div>
<!-- 投票ボタン2 -->
<div class="votebox votebox2">
<a href="javascript:void(0);" onclick="Vote(<?php echo "'".$page_name."_vote2'" ?>, 'cntClass2');" class="vote" title="">(笑)おもしろい
<span class="cntClass2"><?php echo getVoteCount($page_name."_vote2"); ?></span></a>
</div>
<!-- 投票ボタン3 -->
<div class="votebox votebox3">
<a href="javascript:void(0);" onclick="Vote(<?php echo "'".$page_name."_vote3'" ?>, 'cntClass3');" class="vote" title="">(驚)びっくり
<span class="cntClass3"><?php echo getVoteCount($page_name."_vote3"); ?></span></a>
</div>
<!-- 投票ボタン4 -->
<div class="votebox votebox4">
<a href="javascript:void(0);" onclick="Vote(<?php echo "'".$page_name."_vote4'" ?>, 'cntClass4');" class="vote" title="">(美)かっこイイ
<span class="cntClass4"><?php echo getVoteCount($page_name."_vote4"); ?></span></a>
</div>
</div><!-- vote_area1 -->
<div id="vote_area2" style="display:none;">
<p>ご覧いただきありがとうございます。次回もさらに良い記事を目指して頑張ります。</p>
</div>
5.スタイルシート(style.css)の編集
スタイルシートに以下のcssを追加してください。
衝突しないよう調整が必要かもしれません。
/* =投票ボックス
--------------------------------------------------- */
div.votebox a{
font-size: 0.8em;
color: #050505;
background: -moz-linear-gradient(
top,
#e7e6e6 0%,
#ffffff 22%,
#ffffff 35%,
#a3a0a0);
background: -webkit-gradient(
linear, left top, left bottom,
from(#e7e6e6),
color-stop(0.22, #ffffff),
color-stop(0.35, #ffffff),
to(#a3a0a0));
border: 1px solid #1B1B1B;
-moz-box-shadow:
0px 1px 0px rgba(000,000,000,0.7),
inset 0px 0px 1px rgba(255,255,255,0.3);
-webkit-box-shadow:
0px 1px 0px rgba(000,000,000,0.7),
inset 0px 0px 1px rgba(255,255,255,0.3);
box-shadow:
0px 1px 0px rgba(000,000,000,0.7),
inset 0px 0px 1px rgba(255,255,255,0.3);
text-shadow:
0px 0px 0px rgba(000,000,000,0),
0px 0px 0px rgba(255,255,255,0);
}
div.votebox a{
float:left;
display: inline-block;
width:22%;
text-align:center;
margin:0.3em 0 0.3em -1px;
padding: 0.7em 0.8em 0.7em 0.3em;
}
/* Mobile devices */
@media (max-width: 700px) {
div.votebox a{
width:90%;
font-size:1.0em;
}
}
div.votebox a:hover{
filter: alpha(opacity=80);
-moz-opacity:0.8;
opacity:0.8;
}
div.votebox a{
text-decoration:none;
color:#444;
font-weight:bold;
}
div.votebox a span{
color: #BE35C4;
}
div#vote_area1 p {
font-size: 1.1em;
color: #535353;
font-weight: bold;
border-bottom: 1px dotted #3A3C3A;
}
div#vote_area2 p {
margin-top:1em;
font-size: 1.1em;
color: #0C5EDA;
font-weight: bold;
}
#vote_area1 {
margin:0.2em 0 2em 0;
clear: both;
}
div#vote_area1 p {
margin-bottom:0.7em;
}
さいごに
微調整が必要な場合がありますので、その場合はファイルを書き換えてください。
この下にも設置していますので押してみてください。

