How can I set a term reference field for a field that's limited to one value? I can do it for a term reference field that accepts an unlimited number of values like so...

$entity = entity_create('node', $values);
$wrapper = entity_metadata_wrapper('node', $entity);
$wrapper->field_my_term_reference[] = 123;
$wrapper->save();  

However, none of the obvious approaches works if the field is limited to one value. Things like the following don't work...

$entity = entity_create('node', $values);
$wrapper = entity_metadata_wrapper('node', $entity);
$wrapper->field_my_term_reference = 123;
//$wrapper->field_my_term_reference[0] = 123;
//$wrapper->field_my_term_reference[tid] = 123;
//$wrapper->field_my_term_reference->tid->set(123);
//etc.
$wrapper->save();

Comments

arnoldbird’s picture

Status: Active » Closed (works as designed)

Nevermind. I had a mistake in my code. I've confirmed that the following two approaches work when setting a term reference field that accepts only one value...

$entity = entity_create('node', $values);
$wrapper = entity_metadata_wrapper('node', $entity);
$wrapper->field_my_term_reference = 123;
$wrapper->save();

and

$entity = entity_create('node', $values);
$wrapper = entity_metadata_wrapper('node', $entity);
$wrapper->field_my_term_reference->set(123);
$wrapper->save();
cesar ll’s picture

I try to update nodes with values of a json in a custom module, the values in taxonomies do not work for me.

$term_name = 'Example';

if term name exists assign else create

I have it like that and it does not work

$node = node_load($nid);
$wrapper = entity_metadata_wrapper('node', $node);
$wrapper->field_my_term_reference->set($term_name);
$wrapper->save();


Please help.

Regards

cesar ll’s picture

This was resolved with:


<?php 

$name = 'Example';

$node = node_load($nid);
$wrapper = entity_metadata_wrapper('node', $node);

//city_mls is machine name taxonomy
$vocab = taxonomy_vocabulary_machine_name_load('city_mls');
$vid = $vocab->vid;

$tid= custom_create_taxonomy_term($name, $vid);

$wrapper->field_my_term_reference->set($tid);
$wrapper->save();



function custom_create_taxonomy_term($name, $vid) {
  $term_name = taxonomy_get_term_by_name($name);
  if (is_array($term_name)) {
    $term_name = array_values($term_name)[0];
    if (isset($term_name->name)) {
    	//if there is a term, return the id of the term
      return $term_name->tid;
    }else{
    	//if there is no term it creates the term and returns the id
      $term = new stdClass();
      $term->name = $name;
      $term->vid = $vid;
      taxonomy_term_save($term);
      return $term->tid;
    }
  }else{
	//if there is no term it creates the term and returns the id
    $term = new stdClass();
    $term->name = $name;
    $term->vid = $vid;
    taxonomy_term_save($term);
    return $term->tid;
  }
}