[WordPress] while( have_post() )ループでループカウンタの取得方法は?

WordPressの記事一覧をループしているときに、最初の1件目のみ処理を変えたいときがあります。
このような場合は、$wp_queryオブジェクトが持っているcurrent_post変数に、ループカウンタが保存されていますので、これを利用すると便利です。
また、post_count変数に件数が保存されているので、post_countを比較することで最後の時のみ特定の処理を行うことができます。

current_post変数は0から始まることに注意が必要です。

具体的には、have_posts()のループ内に、下記のような感じで判定式を書けばOKです。

if( have_posts() ) {
    while ( have_posts() ) {
        the_post();
        if ( $wp_query->current_post === 0 ) {
            // 最初の記事の時の処理
        }
        if ( $wp_query->current_post === $wp_query->post_count -1 ) {
            // 最後の記事の時の処理
        }
        ...
    }
}

XDebugを有効化したときのメモ

chromeにextensionを追加する


  • インストール先
    Xdebug helper

  • インストールされたextensionのアイコンを右クリック -> オプションを選択する
    IDE keyの項目を、使っている開発環境に合わせる


PHPの環境を作る



[PHP_XDEBUG]
report_zend_debug = 0
zend_extension = "C:\home\php\xdebug\php_xdebug-2.5.0-5.6-vc11-x86_64.dll"
xdebug.remote_enable=on
xdebug.remote_host=127.0.0.1
xdebug.remote_port=9000
xdebug.remote_handler=dbgp

  • 設定が行えたか確認する

php -r "phpinfo();" | grep -i debug

ゴルフ初心者が室内練習でお勧めのグッズはコレ(DAIYA:スイング525)



ゴルフがうまくなりたくて良い練習道具を探していたのですが、フォームの練習にピッタリだと思ったので購入したのがダイヤというメーカが作っているスイング525という練習器具です。

ずっと拒んでいたゴルフをどうしてもやらなければいけなくなり、仕方なく始めたのですが、ゴルフスコアがなかなか良くなりませんでした。自分でもフォームが悪い事は分かっていたのですが、どうしたら良いのか分からずにいました。スウィングフォームで検索をしているうちにこの商品にたどり着きました。

室内練習が出来て便利!


部屋の中で練習できる道具を探していたので、自分にピッタリでした。
やはり、思い立った時に家の中で練習できるのは理想的です。また、商品レビューでもとても良い評価だったので、迷うことなく購入を決めました。

一人での練習は、練習結果のフィードバックが大事


商品の説明で正しいフォームを音が導いてくれるとの事でしたが、使ってみてその良さが良く分かりました。間違ったフォームだと変な場所で音が鳴るので直ぐに分かります。今までの自分のフォームは間違っていたのだと再認識しました。やはり音が鳴るのがポイントでとても分かりやすいのです。



 

[FuelPHP]複数DBへ接続時、エラー”Database type not defined in”が出るときにチェックする事

FuelPHPでは、DBへの接続定義を, fuel/app/config/$ENV/db.phpで管理されています。

インストール直後の開発環境では、以下のようになってます。

return array(
    'default' => array(
        'connection'  => array(
            'dsn'        => 'mysql:host=localhost;dbname=fuel_dev',
            'username'   => 'root',
            'password'   => 'root',
        ),
    ),
);

これを、複数DBへの接続対応するために、例えば’default2’を定義したうえで…

return array(
    'default' => array(
        'connection'  => array(
            'dsn'        => 'mysql:host=localhost;dbname=fuel_dev',
            'username'   => 'root',
            'password'   => 'root',
        ),
    ),

    'default2' => array(
        'connection'  => array(
            'dsn'        => 'mysql:host=localhost;dbname=fuel_dev2',
            'username'   => 'root',
            'password'   => 'root',
        ),
    ),    
);

以下の形でSQLを発行してもエラーになってしまいます。

$sql = 'select * from tbl_test';
\DB::query($sql)->execute('default2');

出力されるエラーは下記の通りです。

Fuel\Core\FuelException [ Error ]:
Database type not defined in "default2" configuration or 
"default2" configuration does not exist

fuel/core/classes/database/connection.php @ line 72

上記のエラーが発生する理由は、default以外のdb定義をする場合にはtypeの設定が必要なためです。
以下のような感じで'type' => 'pdo',の指定を追加すれば、エラーが解消されました。

return array(
    'default' => array(
        'connection'  => array(
            'dsn'        => 'mysql:host=localhost;dbname=fuel_dev',
            'username'   => 'root',
            'password'   => 'root',
        ),
    ),
    'default2' => array(
        'type' => 'pdo',
        'connection'  => array(
            'dsn'        => 'mysql:host=localhost;dbname=fuel_dev2',
            'username'   => 'root',
            'password'   => 'root',
        ),
    ),    
);

上記のエラーが出ていた、fuel/core/classes/database/connection.phpの72行目を見ると、確かにtypeの定義がない時にエラーになっています。

if ( ! isset($config['type']))
{
    throw new \FuelException('Database type not defined in "'.$name.'" configuration or "'.$name.'" configuration does not exist');
}

それでは、defaultの時のtypeはどこで指定されているのでしょうか?
調べてみると、fuel\core\config\db.phpで指定が行われているようでした。
ここに、DB検索を実行時にデータソースを指定しなければdefaultの定義が有効になる事と、default定義のtypeはpdoであることが記載されています。

return array(

    /*
     * If you don't specify a DB configuration name when you create a connection
     * the configuration to be used will be determined by the 'active' value
     */
    'active' => 'default',

    /**
     * Base PDO config
     */
    'default' => array(
        'type'        => 'pdo',
        'connection'  => array(
            'dsn'        => '',
            'hostname'   => '',
            'username'   => null,
            'password'   => null,
            'database'   => '',
            'persistent' => false,
            'compress'   => false,
        ),
        'identifier'   => '`',
        'table_prefix' => '',
        'charset'      => 'utf8',
        'collation'    => false,
        'enable_cache' => true,
        'profiling'    => false,
        'readonly'     => false,
    ),
    ...