2013年3月15日金曜日

allow_url_fopenがoffのとき

共用サーバーにWordPressを設置した場合、プラグインやテーマをインストールする際にFTPの接続情報を都度入力させられることがあります。
そんなときの理由はたいてい、PHPの allow_url_fopen ディレクティブが off になっているためだったりします。
WordPressデフォルトの自動更新機能はこのディレクティブが on になってないと使用できないようです。
この設定はユーザー側で変更できないことがほとんどなのであきらめるしかないんですが、FTPの接続情報を設定ファイルに直接記述しておけば都度入力の手間を省くことができます。

define('FTP_HOST', 'サーバのホスト名またはIPアドレス');
define('FTP_USER', 'FTPユーザー名');
define('FTP_PASS', 'FTPパスワード');

FTP_HOSTの値にホスト名を指定した場合、共用サーバの仕様によっては名前解決に失敗することがあるようです(WADAXとか)。
なので、そんなときは自分のデータが格納されているサーバのドメインをnslookupするなりしてIPアドレスをゲットしてください。
詳しくはWordPress Codex 日本語版でどうぞ。

Contact Form 7 のラジオボタン

WordPressの定番プラグイン「Contact Form 7」をよく利用するのですが、このプラグイン、ラジオボタンの必須入力化に対応していません。
理由はというと下記の通り。

プラグイン配布元サイトより引用---
入力必須版の radio (“radio*”) はありません。Contact Form 7 が “radio*” を提供しない理由は、そもそもラジオボタンとは入力必須のものだからです。
---引用ここまで

とまぁHTMLの仕様に基づくものなので仕方ないかと思い、フォームタグのdefaultオプションで対応してみるものの、一度メールを送ったあとはフォームがリセットされて、defaultオプションで指定したオプションのチェックが外れてしまい、ラジオボタンの値が無いまま送信できてしまいます。
まぁそれだけじゃなくて、ラジオボタンの値を空にして送信する方法などいくらでもあるわけで、やっぱり必須化の機能は欲しいわけであります。。。

そんなわけで、こんな感じです。

function my_wpcf7_validate_radio($result, $tag)
{
    $type = $tag['type'];
    $name = $tag['name'];

    if ('radio' == $type && empty($_POST[$name])) {
        $result['valid'] = false;
        $result['reason'][$name] = wpcf7_get_message('invalid_required');
    }

    return $result;
}
add_filter( 'wpcf7_validate_radio', 'my_wpcf7_validate_radio', 10, 2 );