「WordPressで学ぶPHP(2)データ構造(配列・オブジェクト)編」を発売しました。
本書は「WordPressで学ぶPHP(1)変数・制御構造編」の続編にあたり、PHPの「データ構造」(配列とオブジェクト)について解説します。
配列やオブジェクトは、頭の中で考えるだけでは、イメージがつかみにくいです。本書では図を多用して、配列やオブジェクトをなるべく分かりやすく解説することを心がけました。
Kindle本で、定価250円です。
カスタムフィールドの型を変える(その5)
テキスト型のカスタムフィールドをドロップダウン型かラジオボタン型に変える場合、ここまでの手順だけだと、カスタムフィールドの選択肢(カスタムフィールドの設定の「オプション」の値)は設定されません。
そこで、カスタムフィールドにすでに入力した値から、オプションを設定する方法を紹介します。
1.注意事項
昨日と同様に、この記事で取り上げる方法では、データベースを直接に操作します。
操作を間違うと、Movable Typeのデータ(特にカスタムフィールドのデータ)が壊れることもあり得ます。
データベースを操作する前に、データを必ずバックアップしておいてください。
また、バックアップしたデータを正しく復元できることも確認しておいてください。
操作ミスでデータが壊れたとしても、当方は責任を負いません。
2.SQLの実行
まず、これまでの記事を参照して、テキスト型のカスタムフィールドを、ドロップダウン型またはラジオボタン型に変更しておきます。
そして、以下のようなSQLを実行します(ただし、このSQLはMySQL専用です)。
このSQLは、カスタムフィールドに入力されている値を重複なく抜き出し、コンマで区切って、オプションに設定する働きをします。
UPDATE mt_field SET field_options = ( SELECT GROUP_CONCAT(DISTINCT ○○○_meta_vchar_idx) FROM mt_○○○_meta, mt_○○○ WHERE ○○○_meta_○○○_id = ○○○_id AND ○○○_blog_id = ◇◇◇ AND ○○○_meta_type = 'field.◎◎◎' ) WHERE field_basename = '◎◎◎' AND field_blog_id = ◇◇◇
上記のSQLにある記号は、それぞれ以下に置き換えます。
記号 | 置き換える内容 |
---|---|
○○○ | オブジェクトの型名(記事その3およびその4を参照) |
◇◇◇ | ウェブサイト/ブログのID |
◎◎◎ | カスタムフィールドのベースネーム |
ただし、システムのカスタムフィールドの場合は、SQLの最後の行を「AND field_blog_id = 0」に変え、6行目の「AND ○○○_blog_id = ◇◇◇」を削除します。
3.事例
以下のような場合を考えます。
- IDが1番のブログで、ブログ記事に都道府県を入力するために、テキスト型のカスタムフィールドを追加していました。
- そのカスタムフィールドのベースネームは、「entry_pref」です。
- テキスト型からドロップダウン型に変えるための作業は、すでに終えています。
この場合、SQLの各記号に当てはめる値は、以下のようになります。
記号 | 置き換える内容 | 置き換える値 |
---|---|---|
○○○ | オブジェクトの型名 | entry |
◇◇◇ | ウェブサイト/ブログのID | 1 |
◎◎◎ | カスタムフィールドのベースネーム | entry_pref |
したがって、以下のSQLを実行します。
UPDATE mt_field SET field_options = ( SELECT GROUP_CONCAT(DISTINCT entry_meta_vchar_idx) FROM mt_entry_meta, mt_entry WHERE entry_meta_entry_id = entry_id AND entry_blog_id = 1 AND entry_meta_type = 'field.entry_pref' ) WHERE field_basename = 'entry_pref' AND field_blog_id = 1