WordPress に GoogleAnalytics コードを挿入するプラグイン

2月 5th, 2010

前回に続き
また勉強と実務を兼ねて WordPress に GoogleAnalytics 用のコードを
挿入するプラグインを作ってみました :smile:


CMS として WordPress を使ってサイトを作成しているので、開発中はテスト用の
コード、リリース後は本番用のコードと切り替える必要があります。



また、リリース後も開発環境はテスト用コードを使い続けるので切り替えを
簡単にできるようにしたかったのです :smile:


管理画面で PC 用のウェブプロパティID、ktai_style 用のウェブプロパティID を
セットして、ktai_style のテンプレートで ks_wp_head(), ks_wp_footer() を
有効化すればOK



すでに同じようなプラグインはありますが自分で作ってみました :cool: このサイトでテスト中です… :mrgreen:

WordPress MU のライブラリを CLI から使う時の注意

6月 5th, 2009

このブログではないのですが、ktai_entry の inject.php を使って受信したメールから記事を投稿できるようにしました :mrgreen: その時に気がついた事です。

inject.php から WordPress MU のファイルを沢山読み込むのですが、
その中に wpmu-settings.php ファイルがあります。

wpmu-setings.php の中に以下の記述があり、WordPress MU は CLI から利用する事を想定していないようです。

if( defined( "WP_INSTALLING" ) == false && constant( 'VHOST' ) == 'yes' && !is_\
object( $current_blog ) ) {
// NOBLOGREDIRECT が define されていたら NOBLOGREDIRECT へリダイレクト
// NOBLOGREDIRECT が define されていないならサインアップへリダイレクト
die();
}



つまり CLI からアクセスすると wpmu-settings.php を読み込んだ時点で die() してしまいます。

CLI のときには上記処理へ行かないようにして回避しました。

if( defined( "WP_INSTALLING" ) == false && constant( 'VHOST' ) == 'yes' && !is_\
object( $current_blog ) && isset($_SERVER['REQUEST_METHOD']) ) {
// NOBLOGREDIRECT が define されていたら NOBLOGREDIRECT へリダイレクト
// NOBLOGREDIRECT が define されていないならサインアップへリダイレクト
die();
}



使っている WordPress MU のバージョンは 2.7.0 です。

他にもいくつか気がついて手を加えた箇所があるので暇を見て書いく予定です :smile:

error_log で配列のデータを出力するには

4月 2nd, 2009

php で開発をしている時に error_log() でデバッグしますが、配列のデータ
を表示する事ができなくて困っていました。
自分で関数を作って配列を展開して表示したりしていたのですが、php 標準の
機能でできるんですね :lol: 知りませんでした :lol:

error_log(print_r($_POST, TRUE), 3, '/tmp/logfile');



少し便利になりました :mrgreen:
カサヒラボさんに出てました :idea:

image/pjpeg

3月 12th, 2009

ググると沢山でてきますが、私もはまりました :!:
jpg ファイルを IE でアップロードするとファイルタイプが image/pjpeg になってしまいます :!: そのおかげで validate でエラーになってしまいます :cry:
FireFox からアップすると image/jpeg です。

validate のホワイトリストに image/pjpeg を追加してエラーは解消しました :razz:

Pear Calendar

2月 13th, 2009

Pear::Calendar を使ってみました。

beta 版なので -f を付けて install しました。
-f は強制的に install する場合のやり方なので、
本来は以下のようにするようです。

# pear install Calendar-beta



Pear::Clanendar には目的に応じて使うクラスを選ぶようになっているのですが、カレンダーのレイアウトを意識しているのが面白そうだったので Calendar/Month/Weekdays.php を使ってみました。(他もそうなのかもしれませんが…)

使い方はこんな感じです。
2009年1月の場合。

<?php
require_once 'Calendar/Month/Weekdays.php';
// 0 で先頭を日曜日に指定しています
$cm = new Calendar_Month_Weekdays(2009, 1, 0);
$cm->build();
echo "<table>";
while($day = $cm->fetch()) {
    // 日付が存在しない場所だった場合
    if (!$day->isEmpty()) {
        $date = sprintf("%d", $day->thisDay());
    } else {
        $date = "";
    }
    // カレンダーの先頭の場合
    if ($day->isFirst()) {
        echo "<tr>";
    }
    // カレンダーの先頭の場合
    if ($day->isFirst()) {
        echo "<td style=background-color:#fcc>";
    } else {
        echo "<td>";
    }
    echo $date . "</td>";
    // カレンダーの右端の場合
    if ($day->isLast()) {
        echo "</tr>";
    }
}
echo "</table>";
?>



カレンダーのレイアウトを意識している点が面白いです。
説明文が変ですが言いたい事が伝わると思います :mrgreen:

WordPress XHTML validator

1月 17th, 2009

一度公開した記事のソースが見たくて編集をしようとしたところ
編集ができなくなってしまいました!

色々と調べてみたところ以下のようなプロセスが沢山動いている事に気が付きました。

USER       PID %CPU %MEM   VSZ  RSS TTY      STAT START   TIME COMMAND
apache   11688  0.0  0.0  4440  996 ?        SN   00:46   0:00 xmllint --nonet --xmlout --
encode UTF-8 -


xmllintでピンときました!

先日WordPress XHTML validator というプラグインをインストールしていたのでそれが原因?

install instructions に tidy が必要と書いてあったのですが、
無くても動いているようだったので無視していた事を思い出しました。

そこで tidy をインストールしたところ解決しました :smile:
ちゃんとインストールしないとダメですね :lol:

Ethna 携帯サイト用 validate

1月 9th, 2009

Ethna で携帯サイトを開発していて、キャリアによってフォームから

入力される文字列の文字コードが SJIS の場合と UTF-8 の場合があり、

max(文字列の長さ) の validate で、それぞれの文字コードの strlen()

の結果が違うのでうまくいきませんでした。

文字コードを統一してから validate すれば良いのですが、

そうもできない事情があり、validate plugin を作成してみました。

SJIS か UTF-8 が入力される $nickname の validate の場合に

ActionForm で以下のように定義します。

validate の条件は半角で8文字、全角で4文字以下の場合。

 
var $form = array(
 
'nickname' => array(
 
'type' => VAR_TYPE_STRING,
 
'form_type' => FORM_TYPE_TEXT,
 
'name' => 'ニックネーム',
 
'required' => true,
 
'utf8max' => array(
 
'utf8max' => true,
 
'max' => 8),
 
),
 
);



そして、以下のような Validate Plugin を作成しました。

example/app/plugin/Validate/Example_Plugin_Validator_Utf8max.php

 
<?php
 
class Example_Plugin_Validator_Utf8max extends Ethna_Plugin_Validator
{
function &validate($name, $var, $params)
{
$true = true;
$type = $this->getFormType($name);
if (isset($params['utf8max']) == false || $this->isEmpty($var, $type)) \
{
return $true;
}
$encode に文字列の文字コードが入っている
if ($encode == 'UTF-8') {
if (mb_strwidth($var, 'UTF-8') > $params['max']) {
$msg = "{form}は全角%d文字以下(半角%d文字以下)で入力して下さい";
return Ethna::raiseNotice($msg, E_FORM_MAX_STRING,
array(intval($params['max']/2), $params['max']));
}
} else {
if (strlen($var) > $params['max']) {
$msg = "{form}は全角%d文字以下(半角%d文字以下)で入力して下さい";
return Ethna::raiseNotice($msg, E_FORM_MAX_STRING,
array(intval($params['max']/2), $params['max']));
}
}
}
}
?>



意図する validate ができましたが、もっともっと良い方法があると思います。
皆さんはどうやっているのでしょうか…?

SoftBank の mailto

12月 12th, 2008

SoftBank の mailto には rawurlencode() で。

携帯電話用に mailto を作成していて SoftBank だけうまくいかなかった。

原因は urlencode() を使って subject, body をエンコーディングしていたから。

urlencode() だとスペース(空白)が ”+” になってしまい、
SoftBank の携帯が “+” をデコードせずそのまま表示してしまいます。

DoCoMo, AU は問題なし。

SoftBank だけ rawurlencode() を使うようにしたところOK。
文字コードは UTF-8 で。

$body = rawurlencode($body);
 
$subject = rawurlencode($subject);
 
echo "<a href=\"mailto:" . $rcptaddr . "?subject=" . $subject . "&amp;body=" . $body . "\">メールする</a>";