「WordPressで学ぶPHP(1)変数・制御構造編」が発売されました。
「WordPressで学ぶPHP」シリーズの第1巻で、WordPressを通してPHPを学んでいく本です。
この本では、PHPの基本となる変数と制御構造について解説します。
Kindle本で、定価500円です。
MT5のPHP APIを探る(その3)
「MT5のPHP APIを探る」の第3回をお送りします。
今回は、カスタムフィールドのデータを扱う方法を紹介します。
1.カスタムフィールドの値を読む
Entryクラスのオブジェクトを読み込むと、カスタムフィールドの情報も読み込まれます。
各カスタムフィールドの値は、「オブジェクト->{'entry_field.ベースネーム'}」のように表します。
例えば、「text_field」というベースネームをつけたカスタムフィールドがあるとします。
また、ブログ記事のオブジェクトを$entryという変数に割り当てたとします。
この場合、このカスタムフィールドの値は、「$entry->{'entry_field.text_field'}」で参照することができます。
2.カスタムフィールドの値で条件を指定する
カスタムフィールドの値で条件を指定する場合、以下のように結合と条件設定を行います。
- mt_entryテーブルとmt_entry_metaテーブルとを、entry_idフィールドとentry_meta_entry_idフィールドが等しいという条件で結合します。
- entry_meta_typeフィールドの値が、「field.ベースネーム」に等しい、という条件を指定します。
- entry_meta_XXXフィールドの値が、カスタムフィールドの値になりますので、その値に条件を指定します。
なお、「entry_meta_XXX」の「XXX」の部分は、カスタムフィールドの種類に応じて以下のようになります。
種類 | 型名 |
---|---|
テキスト/URL/ドロップダウン/ラジオボタン | vchar_idx |
テキスト(複数行)/埋め込みオブジェクト/アイテム/オーディオ/ビデオ/画像 | vclob |
チェックボックス/整数(※) | vinteger_idx |
浮動小数点数(※) | vfloat_idx |
日付と時刻 | vdatetime_idx |
なお、整数型と浮動小数点型のカスタムフィールドは、拙作の「数値型のカスタムフィールドを追加するプラグイン」で作ることができます。
3.事例
以下のような状況になっているとします。
- ブログのIDは2番です。
- 「int_field」というベースネームを付けた整数型のカスタムフィールドがあります。
ここで、このブログから、以下のようにブログ記事を読み込みたいとします。
- 上記のカスタムフィールドの値が1~5になっているブログ記事を読み込みます。
- 公開されている記事だけ読み込みます。
- カスタムフィールドの値の小さい順に並べ替えます。
この処理を書くと、以下のようになります。
<?php set_include_path(get_include_path() . PATH_SEPARATOR . '/path/to/mt5/php'); require_once('mt.php'); $cfg_file = 'mt-config.cgi'; $mt = MT::get_instance(null, $cfg_file); $extras['join'] = array( 'mt_entry_meta' => array( 'condition' => 'entry_meta_entry_id = entry_id' ), ); $where = <<< HERE entry_blog_id = 2 and entry_status = 2 and entry_meta_type = 'field.int_field' and entry_meta_vinteger_idx between 1 and 5 order by entry_meta_vinteger_idx HERE; require_once('lib/class.mt_entry.php'); $_entry = new Entry; $entries = $_entry->Find($where, false, false, $extras); foreach ($entries as $entry) { print('title = ' . $entry->title); print(', int = ' . $entry->{'entry_field.int_field'} . "\n"); } ?>
7~11行目で、ブログ記事(mt_entry)とカスタムフィールド(mt_entry_meta)のテーブルを結合しています。
15行目と16行目で、int_fieldカスタムフィールドの値が1~5という条件を指定しています。
そして、17行目で、int_fieldカスタムフィールドの値で並べ替えるようにしています。
22~25行目で、各ブログ記事のタイトルと、int_fieldカスタムフィールドの値を順に出力します。
int_fieldカスタムフィールドの値で並べ替えを行ったので、その小さい順に出力ます。