ノードに対してプログラムで分類用語を設定する方法は?


18

分類用語を作成し、用語参照フィールドを使用してコンテンツタイプ「記事」に割り当てました。プログラムでノードを作成しましたが、ノードに分類用語を設定するにはどうすればよいですか?

分類用語はすでに作成されています。ノードの分類用語をプログラムで設定したい。

回答:


17

この関数を使用して、TermnameからIDを取得します

function _get_tid_from_term_name($term_name) {
  $vocabulary = 'tags';
  $arr_terms = taxonomy_get_term_by_name($term_name, $vocabulary);
  if (!empty($arr_terms)) {
    $arr_terms = array_values($arr_terms);
    $tid = $arr_terms[0]->tid;
  }
   else {
    $vobj = taxonomy_vocabulary_machine_name_load($vocabulary);
    $term = new stdClass();
    $term->name = $term_name;
    $term->vid = $vobj->vid;
    taxonomy_term_save($term);
    $tid = $term->tid;
  }
  return $tid;
}

私はその汎用性(他の部分)が好きなので、用語を追加します。
エドゥアルドチョンカン

15

プログラムでノードを作成する場合、次のような任意の用語に割り当てることができます。

$node = new stdClass();
$node->type = 'YOUR_CONTENT_TYPE_NAME';
$node->title = 'title';

$node->language = LANGUAGE_NONE;
node_object_prepare($node);

//id of your taxonomy term
$tid = 1;

//add term to a node field
//field_yourfield_name - machine name of your term reference field

$node->field_yourfield_name[$node->language][0]['tid'] = $tid;
node_save($node);

1
@ neok.Thanks.term idを使用するとうまく機能しますが、termnamesの設定方法はどうですか?$ node-> field_yourfield_name [$ node-> language] [0] ['name'] = $ termname;
ランジャニ

2
drupal 7で分類IDの代わりに分類用語名を使用して(プログラムで)ノードにタグを付ける方法を知っていますか?
ランジャニ

@pretty taxonomy_get_term_by_nameを使用して用語オブジェクトを取得し、tidを使用します。
リーウッドマン

2

いくつかのエンティティメタデータラッパーを使用して、これを実現できます。例:

try {
  $w_node = entity_metadata_wrapper('node', $entity);
  $w_some_term = entity_metadata_wrapper('taxonomy_term', 1234);
  $w_node->field_term_ref = $w_some_term->tid->value();
  $w_node->save();
} catch (Exception $e) {
  drupal_set_message(t('Error for node: @title, message: @error.',
        array('@title' => $w_node->title->value(), '@error' => $e->getMessage())), 'error');
  watchdog_exception('foo', $e);
}

1
EMWを使用する場合は+1。また、便利なメソッドgetIdentifier()もあり$w_some_term->tid->value()ます。これは、のステップよりも1つ少ないステップです。以下に、この概念を非常によく理解するのに役立つ素晴らしい記事を示します
。EMW

1

用語を追加するときに、$ term-> parent = array(0)を追加する必要があることがわかった。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.