データベースに接続できません

TORIYAMAHONPOS WordPressのまめ知識

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

  • 一覧の表示条件を変える

    カテゴリIDの3を5件表示したい場合、
    [sourcecode language=’php’]
    query_posts($query_string . “&showposts=5&cat=3”);
    [/sourcecode]

    $query_stringに設定できるオプションには、カテゴリ、表示件数、ソート項目などがある。

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

    パーマリンクをデフォルト以外で使用するには、.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]