プラグインでCSSを指定する

テーマではデフォルトでstyle.cssを使用するようになっている。
プラグインでも外部CSSファイルを使うことが可能だ。

プラグインで外部CSSファイルを指定するにはwp_register_style()で登録し、wp_enqueue_style()で読み込ませる。たとえば自分で用意したcssファイルを使いたい場合は、アクションフックのwp_print_stylesで以下のように記述する。wp-headではなくて、wp_print_stylesというのに気がつくのに時間を要した。

[sourcecode language=’php’]
function regist_my_css(){
wp_register_style(‘my_css’, ‘(CSSのフルパス1)’, array(), ”, ‘screen’ );
wp_register_style(‘my_css’, ‘(CSSのフルパス2)’, array(), ”, ‘screen’ );
wp_enqueue_style (‘my_css’);
}

add_action(‘wp_print_styles’, ‘regist_my_css’);
[/sourcecode]

プラグインをローカライズするには

英語で表示されるプラグインでも、翻訳機能を使って日本語で表示することができる。

外国語に対応しているプラグインであれば、potという拡張子のファイルが用意されいてる。
例えば、example.pot
Poeidtというアプリケーション(Windows用)を使って、example.potを翻訳する。
[ファイル]-[POTファイルをもとに新しいカタログを作成する]メニューでpotファイルを読み込む
必要箇所を翻訳し、名前を付けて保存する。
日本語化する場合、このときのファイル名はexample-ja.poにすること。
保存と同時にexample-ja.moが作成される

プラグインで指定してあるディレクトリにmoファイルをコピーする
load_plugin_textdomain(‘example’, PLUGINDIR . ‘/example/languages’);

プラグイン中で翻訳される箇所は、__(や_eの箇所となる。

詳細ページでコメント表示をカスタマイズ

コメント表示をカスタマイズするには、コメントの配列$commentを回して表示する。
$commentはテーマのcomments.phpからのみ参照できる変数となっている。

[sourcecode language=’php’]
foreach ($comments as $comment) {
custom_comments($comment, null, null);
}
[/sourcecode]

WordPress 2.7よりコールバックを指定することができる。
[sourcecode language=’php’]
wp_list_comments(‘type=comment&callback=custom_comments’);
[/sourcecode]

関数custom_comments()はfunctions.phpに作成しておく。

[sourcecode language=’php’]
function toriko_custom_comments($comment, $args) {

$GLOBALS[‘comment’] = $comment;

?>

  • さん

ActivePerlでMySQL

XAMPPでPerlが動くようになったものの、そう簡単にMTのインストールは進まなかった。MySQLがない模様だ。SQLiteで済ませようとしたのに、MT5からデータベースがMySQLのみになっていることにここで気づいた。

ActivePerlでMySQLをインストールしなければならない。ハードルをクリアするとまたすぐに次のハードルが現れる。ActivePerlに付いてくるPPMというツールを使うらしいのだが、実行しようとするとネットに接続中のまま「応答なし」となる。Firewallのせいということに気がつくのも時間がかかった。また今日も挫折しそうになる。
ググりまくって、PPMを実行するまえにコマンドプロンプトで
C:\>set HTTP_PROXY=http://[プロキシ名]:[ポート番号]
とするといいらしいと知った。
続けて、
C:\usr\bin> PPM install DBD-Mysql
とするとなにやらジャカジャカとインスールが始まった。コマンドプロンプトを活用するとは、ン十年ぶりのことだ。かくしてPerlでMySQLが使えるようになった。

ここからはMTのウィザードに従ってスムーズに進み、First Blogを作成するまでが完了した。

XAMPPでActivePerl

XAMPPのPealアドオンをインストールしてPerlが動くようになったと思ったのもつかの間、肝心のMTのインストールが進まなかった。
http://localhost/mtos/mt.cgi
にアクセスすると
DBI object version 1.607 does not match $DBI::VERSION 1.604
というエラーが表示された。MySQLを使用するためのDBIのバージョンが違うといっているらしい。ググっても対応方法が分からない。

http://localhost/mtos/mt-check.cgi
で実行環境をチェックしてみると、やはり途中でエラーが出ていることが分かった。

お手上げモードでググっているうちに、XAMPPのアドオンPerlを使うよりも、ActivePerlというものがよいらしいことを知り、とりあえずこちらを試すことにした。
XAMPPのapacheとMySQLを停止し、Perlアドオンをアンインストールする。
ActivePerl 5.10.1のmsiをダウンロードして実行する。インストール先は”c:\usr\”を指定するとよい。こうするとperlのパスが”/usr/bin/perl”となり、CGIファイルのパスを修正せずに済むのだ。

apacheとMySQLを再開してmt-check.cgiにアクセスすると、エラーが消え「システムのチェックを完了しました。」が表示された。まだ足りないモジュールはあるようだ。ここまで時間がかかったものの、自力でなんとかなったのは嬉しい!やっとMTのインストールができる(か?)。

コメントフォームに項目を追加する

アクションフックのcomment_formで、コメントフォームに項目を挿入することができる。
以下はチェックボックスを追加する例。

[sourcecode language=’php’]
add_filter(‘comment_form’, ‘addMyControl’);

function addMyControl() {
_e(‘
サンプル
‘);
}
[/sourcecode]

ただし、テンプレート(comments.php)に以下の記述が必要である。
[sourcecode language=’php’]
ID); ?>
[/sourcecode]
デフォルトテーマにはこの記述がある。
使用中のテーマにこの記述がない場合は、挿入したい箇所にこれを記述すればよい。

トップページに表示するカテゴリを限定する

トップページに表示するカテゴリを限定するには、
index.phpで記事一覧を表示するループの前でquery_postsを使用する

[sourcecode language=’php’]
query_posts($query_string . “&cat=(カテゴリID)”);
while (have_posts()) : the_post();
// 処理
endwhile;
wp_reset_query();
[/sourcecode]

category_name=(カテゴリスラッグ)というのも使える。

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()すると、その後プラグインの動作と整合性がとれなくなる場合もある。
状況によって様子をみる。