ページの種類

ページの種類はあらかじめ決められており以下のものが存在する。

アーカイブはタクソノミーごとに分類した一覧ページが見れるようである。日付別、年別というのもある。
サイトフロントはトップページのようなページである。
ブログは投稿データの一覧ページである。

ページの種類はリクエストパラメータによって変わるようである。


リクエストパラメータ

リクエストパラメータは「$wp->query_vars」にセットされている。

リクエストパラメータに独自のフィールドを追加するには?

ホワイトリストの概念がある。
なので単にURLクエリにフィールドを追加しただけではデータ取得されない。明示的にフィールドを追加せねばならない。
明示的な追加には「$wp->add_query_var($key_name)」メソッドを利用する。

タクソノミーや投稿タイプを登録したときには、自動的にフィールド追加される。

リクエストパラメータ一覧

$wpオブジェクト

リクエストパラメータを単に保持するだけでなく、内部でHTTPリクエストからのデータ取り出し、プラグインとテーマのロードなど多岐に渡る処理を行っている。


プラグインのHello World!

最低限のプラグインを作成する手順
  1. プラグイン名を決める。
    プラグイン名は他のプラグインとかぶらないようユニークでなければならない。
    プラグイン名の例「test_animal」
  2. 「wp-content/plugins/」にプラグイン名のフォルダを作成する。
    例:wp-content/plugins/test_animalフォルダを作成
  3. 「wp-content/plugins/test_animal」に下記フォルダとファイルを作成
    • languages ただのフォルダ。中身は空でよい。
    • readme.txt 空白でよい
    • test_animal.php プラグイン名と同じ名前をつける。
  4. test_animal.phpの先頭に、下記を例に記述する。
    
    		<?php
    		/*
    		 Plugin Name: テスト・アニマル・プラグイン
    		 Plugin URI: http://amaraimusi.sakura.ne.jp/note_prg/wordpress/
    		 Description: プラグイン開発のHello Worldです。
    		 Version: 1.0
    		 Author: kenji uehara
    		 Author URI: http://amaraimusi.sakura.ne.jp/
    		 License: MIT
    		 */	
    		
  5. WordPressのダッシュボードを開く
  6. 右メニューからプラグイン→インストール済みのプラグイン と操作
  7. 作成したプラグイン名が表示されていることを確認する。
  8. 「有効化」リンクを押してプラグイン有効にする。
    「停止」と表記された状態が有効である。まぎわらしいので注意。

フックしてみる

  1. プラグインのphpファイルを開く
    例:(略\wp-content\plugins\test_animal\test_animal.php)
  2. test_animal.phpの適当な場所に下記を記述
    
    		add_filter('the_content', function($content){
    			$content .= '五月雨をあつめて早し最上川';
    			return $content;
    		});	
    		
  3. フロントページを開いて確認してみる。
    (フロントページ:左上の家アイコン→「サイト表示」で確認できる)

管理メニューに追加

メニューのリンク先は当プラグインの管理ページを指定する場合

	add_action('admin_menu', function(){
		add_menu_page('大猫', '大猫','publish_posts','test_animal/test_animal.php');
	});
	

出力


URLを指定する場合
	add_menu_page('大猫', '大猫','publish_posts','../wp-content/plugins/test_animal/test_page1.php');

add_menu_page関数について

第1引数
不明。

第2引数
メニューの表示される文字列。

第3引数
権限 を指定する。

第4引数
テンプレートやプラグインの管理ページを指定できる。
プラグインであれば、そのプラグイン用の管理ページを指定すると良い。

応用

	add_menu_page('大猫', '大猫','publish_posts','example_setting_page',function(){
		echo '<p>大猫プラグインの管理画面</p>';
	});
	
第4引数はスラッグを指定するとのこと。
スラッグはURLの末尾の文字列。
ダッシュボードからスラッグを登録してから利用する。


「別の更新が現在進行中です。」の対処方法

WordPress を更新するときに「別の更新が現在進行中です。」と表示された場合の対処方法。
方法は2通りある。

方法1
15分待つ

方法2
データベースのwp_optionsテーブルから、下記条件のレコードを削除する。
option_name = 'core_updater.lock'


プラグイン用のテーブルを作成

ソースコード

	<?php
	/*
	 Plugin Name: テスト・アニマル・プラグイン
	 Plugin URI: http://amaraimusi.sakura.ne.jp/note_prg/wordpress/
	 Description: プラグイン開発のHello Worldです。
	 Version: 1.0
	 Author: kenji uehara
	 Author URI: http://amaraimusi.sakura.ne.jp/
	 License: MIT
	 */
	class TestAnimal {
	
		public function __construct(){
	
			// 管理者メニューへ項目を追加する
			add_action('admin_menu', function(){
				add_menu_page('動物管理', '動物管理','publish_posts','example_setting_page',function(){
					echo '<p>テスト動物プラグインの管理画面</p>';
					//include("../wp-content/plugins/test_animal/test_page1.php");        // PHPファイル読み込み
			
				});
			});
	
			// テーブル群を生成する
			register_activation_hook(__FILE__, array($this, 'createTable'));
	
		}
		
		/**
		 * テーブルを生成する
		 */
		public function createTable(){
			error_log('動物名テーブル生成テスト');
			$cmt_db_version = '1.0';
			
			global $wpdb;
			$table_name = $wpdb->prefix . 'test_animal';
			
			$installed_ver = get_option( 'cmt_meta_version' );//現在のDBバージョンを取得する
			
			// テーブル生成用のSQLを作成する。
			if( $installed_ver != $cmt_db_version ) {
				$sql = "CREATE TABLE " . $table_name . " (
					id int(11) UNSIGNED NOT NULL AUTO_INCREMENT COMMENT 'ID',
					animal_name varchar(255) NOT NULL COMMENT '動物名',
					animal_date date NOT NULL COMMENT '動物日付',
					value1 int(11) COMMENT '値1',
					note text COMMENT '備考',
					ip_addr varchar(40) DEFAULT NULL COMMENT 'IPアドレス',
					delete_flg tinyint(1) DEFAULT '0' COMMENT '無効フラグ',
					update_user varchar(50) DEFAULT NULL COMMENT '更新ユーザー',
					user_agent varchar(255) DEFAULT NULL COMMENT 'ユーザーエージェント',
					created datetime DEFAULT NULL COMMENT '生成日時',
					modified timestamp NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新日時',
					UNIQUE KEY id (id)
					)
					CHARACTER SET 'utf8';";
				
				require_once(ABSPATH . 'wp-admin/includes/upgrade.php');
				dbDelta($sql);// テーブル生成
				update_option('cmt_meta_version', $cmt_db_version);//オプションにDBバージョン保存
			}
		}
	
	}
	
	$testAnimal = new TestAnimal();
	

dbDelta関数用のSQL文の注意点

dbDelta関数用のSQL文

	$sql = "CREATE TABLE " . $table_name . " (
		id int(11) UNSIGNED NOT NULL AUTO_INCREMENT COMMENT 'ID',
		animal_name varchar(255) NOT NULL COMMENT '動物名',
		animal_date date NOT NULL COMMENT '動物日付',
		value1 int(11) COMMENT '値1',
		note text COMMENT '備考',
		ip_addr varchar(40) DEFAULT NULL COMMENT 'IPアドレス',
		delete_flg tinyint(1) DEFAULT '0' COMMENT '無効フラグ',
		update_user varchar(50) DEFAULT NULL COMMENT '更新ユーザー',
		user_agent varchar(255) DEFAULT NULL COMMENT 'ユーザーエージェント',
		created datetime DEFAULT NULL COMMENT '生成日時',
		modified timestamp NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新日時',
		UNIQUE KEY id (id)
		)
		CHARACTER SET 'utf8';";
	require_once(ABSPATH . 'wp-admin/includes/upgrade.php');
	dbDelta($sql);// テーブル生成
	

wpdbのINSERT

サンプル

	global $wpdb;
	$result = $wpdb->insert( 'test_animal', array(
			'animal_name' => 'クロサイ',
			'value1' => 1000,
		));
	

wpdpのUPDATE

サンプル

	global $wpdb;
	$result = $wpdb->update(
				'enq_test_animal',
				array(
					'animal_name' => 'アフリカゾウ',
					'value1' => 1001
				),
				array( 'id' => 2 )// WHERE条件
			);
	

wpdpのDELETE

サンプル

	global $wpdb;
	$result = $wpdb->delete( 'enq_test_animal', array( 'id' => 3 ) );
	
削除した場合、返値($result)は1である。
削除対象が存在しないため削除できなかった場合、返値は0である。