自作曲コーナーに設置してある「いいね」ボタンは、自作のWordPressプラグインです。
ショートコードでIDを書くだけで、独自の「いいね」ボタンが作れて、ボタンを押すとカウントアップしてくれて、1ページにたくさん設置できる、いわゆる「クリックカウンター」を探していたのですが、ページ単位だったりとなかなか良いものがなく、「ないのなら、作ってしまえ!」ということで、見よう見まねで作ってみました。Facebookの「いいね」は共有を目的としていますが、この「いいね」はサイト独自のもので、みんなに褒めてもらうだけを目的としたものです。
まだ、正式なプラグインとして公開できる代物ではないので、コードを紹介するに留めます。
Ajaxを使ったWordPressのプラグインとしては、むずかしいことをしていないので、すごく基礎的なコードかなぁと思います。
デモ
こんな感じで動きます。押すとカウンターが増える。それだけです。
このコードがいいなと思った人も、押してあげてください。
ちなみにここでは名古屋弁にしてあります。
ええがね(1665)
使い方
編集画面にショートコードを書くだけ
[bfcc id="christmas_day"]
(かっこは半角にしてください)
id には 適当な文字列を入れてください。そのIDを認識してカウントアップします。
要するにidの中身を別の文字列にするだけで、新しいカウンターを作成することになります。
同じIPの連続カウントアップは受け付けません。
bootstrapのCSSを使うことを前提として class名が「btn btn-default」のリンクを生成します。bootstrapが無い方は自分でスタイルをつけてください。
ご注意
- 自己責任でご自由にお使いください。このプログラムが損害を与えたとしても責任はとりません。
- 前処理、後処理が適当です。インストールするとwp_bf_click_counterというテーブルが作成されますが、アンイストールしても残ります。不要になったらテーブルを削除してください。
設置方法
(1)wp-content/plugins の中に、 bf-click-counter というディレクトリを作成
(2)さらにその中に bf-click-counter.php というファイル名で、以下のコードを作成。
(3)WordPressのプラグイン一覧に「BF Click Counter」が表示されるので有効化。
(4)あとは上記「使い方」を見て、じゃんじゃんショートコードを設置してください。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 |
<?php /* Plugin Name: BF Click Counter Author: Taichi MARUYAMA Plugin URI: http://maruyama.breadfish.jp/ Description: シンプルなクリックカウンターです。 Version: 0.11 Author URI: http://maruyama.breadfish.jp/ Text Domain: bf-click-counter */ global $wpdb; global $bf_click_counter; // IDをキーにしてカウント数を格納 global $bf_click_ip; // IDをキーにしてIPアドレスを格納 /** * DBで使うテーブル名を返す * * @access public * @return void */ function bf_click_counter_get_table_name() { global $wpdb; return $wpdb->prefix . "bf_click_counter"; } /** * アクティベーション。テーブルの作成を行う。 * * @access public * @return void */ function bf_click_counter_activation() { global $wpdb; $charset_collate = $wpdb->get_charset_collate(); $table_name = bf_click_counter_get_table_name(); $sql = "CREATE TABLE $table_name ( id mediumint(9) NOT NULL AUTO_INCREMENT, keyname text NOT NULL, count int NOT NULL, ipaddress text NOT NULL, register_datetime datetime DEFAULT '0000-00-00 00:00:00' NOT NULL, update_datetime datetime DEFAULT '0000-00-00 00:00:00' NOT NULL, UNIQUE KEY id (id) ) $charset_collate;"; require_once( ABSPATH . 'wp-admin/includes/upgrade.php' ); dbDelta( $sql ); } register_activation_hook(__FILE__, 'bf_click_counter_activation'); /** * ロード時に変数を初期化する. * * @access public * @return void */ function bf_click_counter_initialize() { global $wpdb, $bf_click_counter, $bf_click_ip; $bf_click_counter = array(); $table_name = bf_click_counter_get_table_name(); $results = $wpdb->get_results("SELECT * FROM $table_name"); foreach($results as $one) { $bf_click_counter[$one->keyname] = $one->count; $bf_click_ip[$one->keyname] = $one->ipaddress; } } add_action('init', 'bf_click_counter_initialize'); /** * ショートコードの処理。ボタン(カウント数)を表示する * * @access public * @param mixed $atts * @return void */ function bf_click_counter_display($atts) { global $bf_click_counter; extract(shortcode_atts(array( 'id' => '0', ), $atts)); // カウンターがすでにある場合 if (array_key_exists($id, $bf_click_counter)) { return '<a href="javascript:void(0);" class="btn btn-default bf-click-counter" data-id="' . $id . '">いいね(<span class="count">' . $bf_click_counter[$id] . '</span>)</a>'; } // カウンターがない場合はカウント数ゼロでボタンを表示 return '<a href="javascript:void(0);" class="btn btn-default bf-click-counter" data-id="' . $id . '">いいね(<span class="count">0</span>)</a>'; } add_shortcode('bfcc', 'bf_click_counter_display'); /** * JavaScript(Ajax)の出力(いいねボタンの押下を受け付ける) * * @access public * @return void */ function bf_click_counter_ajax() { ?> <script> var bf_ajaxurl = '<?php echo admin_url( 'admin-ajax.php'); ?>'; jQuery(function() { jQuery('.bf-click-counter').click(function() { var self = this; jQuery.ajax({ type: 'POST', url: bf_ajaxurl, data: { 'id' : jQuery(this).attr('data-id'), 'action' : 'bf_click_counter_countup', }, success: function( response ){ jQuery(self).find('.count').html(response); } }); return false; }); }) </script> <?php } add_action( 'wp_head', 'bf_click_counter_ajax'); /** * Ajaxの受付処理 * * @access public * @return void */ function bf_click_counter_countup(){ bf_click_counter_initialize(); global $wpdb, $bf_click_counter, $bf_click_ip; $id = $_POST['id']; $ipaddr = $_SERVER["REMOTE_ADDR"]; $nowdate = date('Y-m-d h:m:s'); // 登録日付 // カウンターがすでにある場合、インクリメントしてDBをアップデート if (array_key_exists($id, $bf_click_counter)) { // 同じIPからの連続いいねは阻止 if ($bf_click_ip[$id] != $ipaddr) { $bf_click_counter[$id]++; $wpdb->update(bf_click_counter_get_table_name(), array('count' => $bf_click_counter[$id], 'ipaddress' => $ipaddr, 'update_datetime' => $nowdate), array('keyname' => $id)); } // カウンターがない場合、DBにインサート } else { $bf_click_counter[$id] = 1; // 初期値は1 $wpdb->insert(bf_click_counter_get_table_name(), array('keyname' => $id, 'count' => 1, 'ipaddress' => $ipaddr, 'register_datetime' => $nowdate)); } echo $bf_click_counter[$id]; die(); } add_action( 'wp_ajax_bf_click_counter_countup', 'bf_click_counter_countup' ); add_action( 'wp_ajax_nopriv_bf_click_counter_countup', 'bf_click_counter_countup' ); |