¿Cómo establecer un término de taxonomía mediante programación para un nodo?

18

Creé términos de taxonomía y lo asigné a un tipo de contenido ' Artículo ' usando el campo de referencia de términos. Creé nodos mediante programación, pero ¿cómo establecer términos de taxonomía para los nodos?

Los términos de taxonomía ya están creados. Quiero establecer el término de taxonomía para un nodo mediante programación .

Ranjani
fuente

Respuestas:

17

Use esta función para obtener ID de Termname

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;
}
Dang
fuente
Me gusta su versatilidad (la otra parte), por lo que agrega el término.
Eduardo Chongkan
15

Cuando crea un nodo mediante programación, puede asignarlo a cualquier término como este:

$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);
Petro Popelyshko
fuente
1
@ neok.Gracias. Funciona bien usando el término id. Pero, ¿cómo configurar los nombres de término? es como $ node-> field_yourfield_name [$ node-> language] [0] ['name'] = $ termname;
Ranjani
2
¿Alguien sabe cómo etiquetar el nodo (programáticamente) usando taxonomy termname en lugar de taxonomy id en drupal 7?
Ranjani
@pretty Use taxonomy_get_term_by_name para obtener el término objeto y luego use el tid.
Lee Woodman
2

Puede usar algunos contenedores de metadatos de entidad para lograr eso, por ejemplo:

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);
}
kenorb
fuente
1
+1 por usar EMW. También tienen un método útil getIdentifier (), que es un paso menos que $w_some_term->tid->value(). Aquí hay un gran artículo que me ayudó a comprender este concepto mucho mejor, y al que me refiero regularmente cuando uso EMWs:
scotself
1

Al agregar términos, descubrí que necesitaba agregar $ term-> parent = array (0) de lo contrario, la tabla taxonomy_term_hierarchy no se actualiza correctamente y los términos no se muestran en la página de la lista de administradores para ese vocabulario

usuario3425125
fuente