回答:
$node = node_load($nid);
$node_wrapper = entity_metadata_wrapper('node', $node);
$node_wrapper->field_myfield->set(1);
$node_wrapper->save();
エンティティメタデータラッパーは、ノード内のフィールドの値を設定または読み取るための優れた方法です。
フィールド値のみを更新する場合(更新された時間、リビジョンに関するノードメタデータを更新せずに)、functionを使用しますfield_attach_update()
。
例:
$node = node_load($nid);
$field_language = field_language('node', $node, 'field_myfield');
$node->field_fieldname[$field_language][0]['value'] = 'some value';
field_attach_update('node', $node);
さらに、次のコマンドでノードの静的キャッシュをリセットする必要がある場合がありますresetCache(array($nid))
。
entity_get_controller('node')->resetCache(array($node->nid));
私はこれを実装したばかりで、このコードが私のために働いていることがわかりました。
$node = node_load($nid);
if (isset($node)) {
$field_language = field_language('node', $node, 'field_myfield');
$node->field_fieldname[$field_language][0]['value'] = 'some value';
node_save($node);
}
field_fieldnameを更新するときに、4行目でこれを使用していることがわかりました。
$node->field['field_myfield'][0]['value'] = 'some value';
動作しませんでした。