ノード オブジェクト ($node) に定義されているフィールドの値をプログラムで表示するにはどうすればよいか。オブジェクトの要素に直接アクセスして出力することもできるが、Drupal 7 では field_view_field() API を使用する。
たとえば、システム内部名称が field_hoge というフィールドの場合は次のように呼び出す。
field_view_field('node', $node, 'field_hoge');
第1引数はエンティティの種類で 'node' か 'user' を指定できる。ここでは対象となるエンティティがノードなので 'node' を指定。第2引数は表示対象フィールドが格納されたオブジェクト。第3引数がフィールドのシステム内部名称。
さらに、第4引数として表示モードの名前または表示設定の配列を渡すこともできる。後者はフィールド設定 UI の [表示管理] タブでの指定に対応する。たとえば、フィールドのラベル表示を抑制したい場合は、次のようにオプションを指定する。
field_view_field('node', $node, 'field_hoge', array('label'=>'hidden'));
詳しくは、field_view_field() API のリファレンスを参照。
この関数は表示に必要なデータを格納した配列を戻り値として返却する。この配列を HTML コンテンツに変換するには render() 関数を使用する。まとめると、ノード ($node) の field_hoge フィールドのコンテンツを表示するコードは次のようになる。
$out = field_view_field('node', $node, 'field_hoge', array('label'=>'hidden'));
print render($out);
render() 関数は HTML コンテンツを返すだけで表示は行わないので、print や echo で戻り値を出力する必要がある点に注意。
参考にさせていただいた記事: