XAMPPでperlを動かす

MTOSを試したくなった。
まずはXAMPPでperlが動くようにしなければ!

1.公式サイトよりアドオンをダウンロード
 http://www.apachefriends.org/jp/xampp-windows.html#2675
 インストーラの実行でエラーが出るため、自己解凍型ZIPアーカイブを使用
 Perl 5.10.0-2.2.9-pl2のEXE (7-zip)

2.解凍してXAMPPのインストールフォルダ(c:\xampp以下に)に上書きコピーする

3.C:\xampp\setup_xampp.batを実行

4.Windowsの設定で、拡張子.cgiをperlに関連付けする
 拡張子cgiに、アクションとしてopenを追加し、アクションを実行するアプリケーションに
 C:\xampp\perl\bin\perl.exe “%1” を設定

5.Apacheのhttpd.confの「 ScriptInterpreterSource Registry」 の行頭の#を外す

6.Apacheを再起動

query_postsを使ったらwp_reset_query

query_postsを使って表示条件を操作した後は、wp_reset_queryで条件をリセットしたほうがよい
しておかないと、is_home()が無効になる。

[sourcecode language=’php’]
query_posts($query_string . &showposts=5&cat=3″);
if (have_posts()) :
while (have_posts()) : the_post();
// 処理
endwhile;
endif;

wp_reset_query();
[/sourcecode]
ただし、wp_reset_query()すると、その後プラグインの動作と整合性がとれなくなる場合もある。
状況によって様子をみる。

パーマリンクをカスタマイズするには

パーマリンクをデフォルト以外で使用するには、.htaccessの書き換え可能になっている必要がある。
.htaccessの書き換え可能にするには、httpd.confでmod_rewriteを有効にしておく。もし.htaccessを書き換えできない場合は、パーマリンクの設定を変更した際にエラーメッセージが表示される。

また、.htaccessを書き換えたとしてもパーマリンクにアクセスした際に404になることがある。その場合は、httpd.conf の セクションに AllowOverride All を明記すればよい。同じサーバなのにパーマリンクが使えないサイトがあるのはなぜかと悩んでいたら、これだった。

記事をページ分割

記事をページ分割して表示することができる。
記事の本文に<!–nextpage–>を記述すると改ページになるので、ひとつの記事が複数ページで表示されるようになる。

1ページ目の内容
<!–nextpage–>
2ページ目の内容
<!–nextpage–>
3ページ目の内容

使用中のテーマがページネーションに対応しているかどうか確認が必要。
自分でテーマを作成する際は、デフォルトテーマを参考にするとよい。

定期的に自動処理させる

WordPressに用意されている擬似CRONのようなものを使って、定期的な自動処理を実行することができる。
wp_schedule_event()で時間を指定して、独自のアクションフックを発生させる。
実行のタイミングは、毎時(hourly)か毎日(daily)。

毎日、午前5時に設定する場合
[sourcecode language=’php’]
$timenow = time();
$year = date(‘Y’, $timenow);
$month = date(‘n’, $timenow);
$day = date(‘j’, $timenow);
$hours = 5;
$minutes = 0;
$seconds = 0;
$schedule = mktime($hours, $minutes, $seconds, $month, $day, $year);
wp_schedule_event($schedule, ‘daily’, ‘everyday_myevent’);
[/sourcecode]

設定した時間になるとeveryday_myeventが発生するので、処理を関連づけておく。
[sourcecode language=’php’]
add_action(‘everyday_myevent’, ‘run_myschedule’);

function run_myschedule() {
// 処理
}
[/sourcecode]

解除する場合
[sourcecode language=’php’]
wp_clear_scheduled_hook(‘everyday_myevent’);
[/sourcecode]

状態を取得する場合
[sourcecode language=’php’]
if($next_scheduled = wp_next_scheduled(‘everyday_myevent’)){
$next = date(‘Y-m-d H:i:s’, $next_scheduled);
}
[/sourcecode]

テーマ用の関数を作るには

テーマで使う処理をfunctions.phpに関数として記述することができる。
テーマのディレクトリにfunctions.phpを作成しておくと、テーマを初期化する際に自動的に読み込まれる。functions.phpはテーマによってはすでに存在しているので、自分用関数はここに追加すればよい。
functions.phpはテーマを初期化する際に自動的に読み込まれ、ここに書いた関数はテーマ内から呼ぶことができる。functions.phpでは冒頭の<?phpの前と、後尾の ?>の後ろに改行を入れないこと。

プラグインを作るには

プラグインとは、どういうときに何をしたいか?というようなアクションフックへの定義の集まりだ。これを自作するには、/wp_content/plugins/以下にフォルダを用意し、PHPで処理を書いていくことになる。ファイル名は自由で、以下のコメント文がついているファイルがまず実行される。

[sourcecode language=’php’]
/*
Plugin Name: 名称
Plugin URI: URL
Description: 説明
Version: バージョン
Author: 開発者
Author URI: 開発者URL
*/
[/sourcecode]

ファイルが複数になる場合は、必要に応じてrequireしてもよい。プラグインの作成には、クラスを使用するのが主流のようだ。こうやって誰かが作ったプラグインをダウンロードすると、ソースを見ることができるのはいい。自分のやりたいことに似たプラグインを見つけて改良したり、PHPの勉強にもなるので助かる。

ダッシュボードにメニューを追加する

ダッシュボードにプラグイン専用のメニューを追加することができる。
使用するアクションフックは、admin_menu
[ほげ]というメニューを追加して、その配下に[子ほげ]というサブメニューを追加する場合は、以下のようになる。

[sourcecode language=’php’]
add_action(‘admin_menu’,’add_mymenu’);

function add_mymenu(){

add_menu_page(‘MYMENU’, ‘ほげ’, 0, __FILE__, ‘mymenu’);
add_submenu_page(__FILE__, ‘MYMENU’, ‘子ほげ’, 0, ‘mychild’, ‘mychild’);
}

function mymenu(){
// mymenuの処理
}

function mychild(){
// mychildの処理
}
[/sourcecode]

DBのテーブル名

プラグインでSQL文を記述する場合の、テーブル名の参照のしかた、

WORDPRESSで使用するテーブル名は”wp_”とは限らないため、プラグインでSQLを使う場合は、$wpdb->(接頭語より後の名前)でテーブルを参照する。例えば投稿テーブルは、$wpdb->postsとなる。
または接頭語$wpdb->prefixを使って参照することもできる。投稿テーブルは、$wpdb->prefix .”posts”となる。
自分で追加したテーブルは、$wpdb->prefix .”(接頭語より後の名前)”となる。