D7では、分類用語にフィールドをプログラムで追加/変更するにはどうすればよいですか?それらは明らかにフィールド化可能であり、UIではノードで行うのと同じようにフィールドを追加および編集できますが、コードでは簡単な作業ではないことが判明しました。りんごやバナナのような用語でフルーツという名前の語彙があるとします。 main_article_id
という名前のフィールドを追加しました。そのため、すべての用語には、名前、説明、メインの記事IDがあります。 Fruitボキャブラリ(field_fruit
)への参照を持つApplesという名前のノードを作成し、Apples用語を選択すると、コードはApples用語を更新し、そのmain_article_id
フィールドを$node->nid
に設定する必要があります。これが私のコードです:
//hook_node_insert fires after new node has been inserted into db
function MYMODULE_node_insert($node)
{
$taxonomy_term_id = $node->field_FRUIT[LANGUAGE_NONE][0]['value'];
$taxonomy_term = taxonomy_term_load($value['tid']);
if($taxonomy_term != FALSE)
{
//doesn't work
$taxonomy_term->field_main_article_id[LANGUAGE_NONE][0]['value'] = $node->nid;
taxonomy_term_save($taxonomy_term);
}
}
フィールドの列名は常にvalue
とは限りません。分類用語参照の場合はtid
であり、ノード/エンティティ参照の場合は使用しているモジュールによって異なります。
References モジュールを使用して作成されたフィールドの名前はnid
であり、 Entity Reference モジュールを使用して作成されたフィールドの名前はtarget_id
。
次のコードは少し良く機能するはずです:
//hook_node_insert fires after new node has been inserted into db
function MYMODULE_node_insert($node)
{
$taxonomy_term_id = $node->field_FRUIT[LANGUAGE_NONE][0]['tid'];
// $value['tid'] isn't defined anywhere in this function scope so I
// assume you meant to use $taxonomy_term_id here
$taxonomy_term = taxonomy_term_load($taxonomy_term_id);
if($taxonomy_term != FALSE)
{
$column_name = 'nid'; // Or 'target_id' if you're using entity reference
$taxonomy_term->field_main_article_id[LANGUAGE_NONE][0][$column_name] = $node->nid;
taxonomy_term_save($taxonomy_term);
}
}