# vi ./sgaccess/sgaccess.php
<?php
/**
* @package Access
* @version 0.1.1
*/
/*
Plugin Name: SgAccess
Plugin URI: http://example.com/plugins/sgaccess/
Description: Plugin development tutorial for making plugin with MySQL
Author: Kanehiro Yuu
Version: 0.1.1
Author URI: https://sys-guard.com/
*/
//実行するよ!
$sgAccessObj = new Sg_Access();
class Sg_Access
{
public function __construct()
{
global $sgaccess_version;
$sgaccess_version = '1.0';
//初期化
$this->admin_init();
}
public function admin_init()
{
register_activation_hook( __FILE__, array($this, 'sgaccess_install') ); // プラグイン有効化時にDB作成
register_activation_hook( __FILE__, array($this,'sgaccess_install_data') ); //プラグイン有効化時にDB初期化
register_deactivation_hook( __FILE__, array($this,'sgaccess_delete_data') ); //プラグイン停止時に実行する関数を登録
add_action( 'plugins_loaded', array($this, 'myplugin_update_db_check') );//プラグイン更新時のDB更新チェック
add_shortcode( "SG-COUNTER", array($this, 'counter_start') );//カウンター作動
add_filter('widget_text', 'do_shortcode');//ウィジェットでショートコードが使用できるようにする。
}
// カウンター機能作動 =============================================================
// ショートコードタグへのアクセス毎にこの関数が実行される。
public function counter_start()
{
$this->access_count();
$this->access_show();
}
public function access_count()
{
global $wpdb;
$table_name = $wpdb->prefix . 'sgaccess';
$sql = "UPDATE {$table_name} SET count = count + 1 WHERE id = 1;";
$wpdb->query($sql);
}
public function access_show()
{
global $wpdb;
$table_name = $wpdb->prefix . 'sgaccess';
$sql = "SELECT id, count FROM {$table_name} WHERE id = 1;";
$results = $wpdb->get_results($sql);
foreach($results as $row){
if($row->id == 1){
echo "<h2>あなたは<strong>{$row->count}番目のゲストです。</strong></h2>";
echo "<MARQUEE>訪問者はゲストブックに書き込みして下さい。</MARQUEE>";
}
}
}
// カウンター機能 ここまで =====================================================
//DBの作成 ※プラグイン有効時
function sgaccess_install()
{
global $wpdb;
$table_name = $wpdb->prefix . 'sgaccess';
$charset_collate = $wpdb->get_charset_collate();
$sql = "CREATE TABLE $table_name (
id mediumint(9) NOT NULL AUTO_INCREMENT,
time datetime DEFAULT '0000-00-00 00:00:00' NOT NULL,
count int UNSIGNED NOT NULL,
UNIQUE KEY id (id)
)
{$charset_collate}, ENGINE=InnoDB;";
require_once( ABSPATH . 'wp-admin/includes/upgrade.php' );
dbDelta( $sql );
add_option( 'sgaccess_version', $sgaccess_version );
}
//DBの初期化 ※プラグイン有効時
function sgaccess_install_data()
{
global $wpdb;
$table_name = $wpdb->prefix . 'sgaccess';
$count_init = 0;
$wpdb->insert(
$table_name,
array(
'time' => current_time( 'mysql' ),
'count' => $count_init,
)
);
}
//DB更新チェック ※プラグイン更新
function myplugin_update_db_check()
{
if ( get_site_option( 'sgaccess_version' ) != $sgaccess_version ) {
$this->sgaccess_install();
}
}
//DBの削除 ※プラグイン停止時
function sgaccess_delete_data()
{
global $wpdb;
$table_name = $wpdb->prefix . 'sgaccess';
delete_option('sgaccess_version');
$sql = "DROP TABLE {$table_name};";
$wpdb->query($sql);
}
}//Sg_Access