Agregar soporte de taxonomía de categorías a un tipo de entrada personalizada

2 abr 2012, 17:03:59
Vistas: 42K
Votos: 6

Estoy escribiendo código que hace un uso extensivo de tipos de entrada personalizados y estoy buscando una forma de agregar programáticamente una categoría a un tipo de entrada personalizada definido, y luego acceder a su ID de categoría.

Estuve investigando pero no puedo encontrar una forma robusta de lograrlo - wp_create_category sería la opción obvia pero por supuesto esto no funciona con tipos de entrada personalizados.

0
Todas las respuestas a la pregunta 3
0
11

Dentro de tu función register_post_type puedes añadir el parámetro taxonomies.

register_post_type('discography',
    array(
    'labels' => array(
             //tus etiquetas aquí
             ),

  'taxonomies' => array('recordings', 'category', 'whatever'),  //añade esto....

  'public' => true,
  'show_ui' => true,
  'exclude_from_search' => true,
  'hierarchical' => true,
  'supports' => array( 'title', 'editor', 'thumbnail' ),
  'query_var' => true
        )
  );

Alternativamente puedes usar register_taxonomy_for_object_type, http://codex.wordpress.org/Function_Reference/register_taxonomy_for_object_type

2 abr 2012 18:07:33
1

Por favor coloca este código en el functions.php de tu tema

function post_type_discog() {

register_post_type('discography',
    array(
    'labels' => array(
            'name' => __( 'Discografía' ),
            'singular_name' => __( 'Discografía' ),
            'add_new' => __( 'Añadir nuevo' ),
            'add_new_item' => __( 'Añadir nueva discografía' ),
            'edit' => __( 'Editar' ),
            'edit_item' => __( 'Editar discografía' ),
            'new_item' => __( 'Nueva discografía' ),
            'view' => __( 'Ver discografía' ),
            'view_item' => __( 'Ver discografía' ),
            'search_items' => __( 'Buscar discografías' ),
            'not_found' => __( 'No se encontraron discografías' ),
            'not_found_in_trash' => __( 'No hay discografías en la papelera' ),
            'parent' => __( 'Discografía padre' ),
        ),
  'public' => true,
  'show_ui' => true,
        'exclude_from_search' => true,
        'hierarchical' => true,
        'supports' => array( 'title', 'editor', 'thumbnail' ),
        'query_var' => true
        )
  );
}
add_action('init', 'post_type_discog');

add_action( 'init', 'create_discog_taxonomies', 0 );

function create_discog_taxonomies()
{
  // Añadir nueva taxonomía, hacerla jerárquica (como categorías)
  $labels = array(
    'name' => _x( 'Grabaciones', 'taxonomy general name' ),
    'singular_name' => _x( 'Grabación', 'taxonomy singular name' ),
    'search_items' =>  __( 'Buscar grabaciones' ),
    'popular_items' => __( 'Grabaciones populares' ),
    'all_items' => __( 'Todas las grabaciones' ),
    'parent_item' => __( 'Grabación padre' ),
    'parent_item_colon' => __( 'Grabación padre:' ),
    'edit_item' => __( 'Editar grabación' ),
    'update_item' => __( 'Actualizar grabación' ),
    'add_new_item' => __( 'Añadir nueva grabación' ),
    'new_item_name' => __( 'Nombre de nueva grabación' ),
  );
  register_taxonomy('recordings',array('discography'), array(
    'hierarchical' => true,
    'labels' => $labels,
    'show_ui' => true,
    'query_var' => true,
    'rewrite' => array( 'slug' => 'recordings' ),
  ));
}

Con este código puedes crear un tipo de entrada personalizada y un tipo de categoría personalizada. Este código puede serte útil.

2 abr 2012 17:14:52
Comentarios

Gracias, pero eso es lo que ya tengo. Lo que necesito ahora es agregar categorías reales (en este caso, agregar grabaciones reales)

George Pearce George Pearce
2 abr 2012 17:32:55
2

Si necesitas pre-crear algunos términos, puedes agregar lo siguiente en la función init que registra la taxonomía. Creará el término 'foo' en la taxonomía 'recordings'.

if (!term_exists( 'foo', 'recordings') ){
        wp_insert_term( 'foo', 'recordings' );
    })
2 abr 2012 18:27:21
Comentarios

¡Perfecto! ¿Hay alguna forma de obtener el ID del término creado? No expresé mi pregunta muy bien, así que muchas gracias.

George Pearce George Pearce
2 abr 2012 23:44:00

wp_insert_term devuelve los IDs del término y la taxonomía, mira aquí: http://codex.wordpress.org/Function_Reference/wp_insert_term#Return_Values también podrías usar get_term_by: http://codex.wordpress.org/Function_Reference/get_term_by

helgatheviking helgatheviking
3 abr 2012 00:20:06