¿Cómo agregar etiquetas a un tipo de entrada personalizada?

19 ago 2012, 01:24:44
Vistas: 124K
Votos: 46

Tengo un tipo de entrada personalizada (custom post type) llamado portfolio y estoy tratando de agregarle la taxonomía de etiquetas, ¿cómo puedo hacer esto?

2
Comentarios

@chifliiiii si hago eso, las Categorías y Etiquetas son las mismas que se usan para las Entradas. ¿Cómo obtengo Categorías y Etiquetas que sean exclusivas para el nuevo tipo de contenido?

Troy Templeman Troy Templeman
8 may 2014 19:36:36

@chifliiiii ¿Cómo muestro las etiquetas en la plantilla?

Max Max
22 mar 2017 01:54:13
Todas las respuestas a la pregunta 9
1
102

O simplemente agrega:

'taxonomies' => array('post_tag')

Un arreglo de taxonomías registradas como category o post_tag que serán usadas con este tipo de contenido. Esto puede usarse en lugar de llamar directamente a register_taxonomy_for_object_type(). Las taxonomías personalizadas aún necesitan registrarse con register_taxonomy().

al arreglo $args en el archivo functions.php donde creas el tipo de contenido personalizado con register_post_type(). Esto agregará un tipo de contenido personalizado para usar las mismas categorías y/o etiquetas que las entradas normales.

12 jul 2013 06:06:43
Comentarios

Por favor agrega una explicación a tu respuesta: ¿por qué podría eso resolver el problema?

fuxia fuxia
12 jul 2013 06:54:48
7
27

Así: (Donde dice "portfolio" es donde se registra la taxonomía para un tipo de publicación)

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

//crear dos taxonomías, géneros y etiquetas para el tipo de publicación "tag"
function create_tag_taxonomies() 
{
  // Añadir nueva taxonomía, NO jerárquica (como etiquetas)
  $labels = array(
    'name' => _x( 'Etiquetas', 'taxonomy general name' ),
    'singular_name' => _x( 'Etiqueta', 'taxonomy singular name' ),
    'search_items' =>  __( 'Buscar Etiquetas' ),
    'popular_items' => __( 'Etiquetas Populares' ),
    'all_items' => __( 'Todas las Etiquetas' ),
    'parent_item' => null,
    'parent_item_colon' => null,
    'edit_item' => __( 'Editar Etiqueta' ), 
    'update_item' => __( 'Actualizar Etiqueta' ),
    'add_new_item' => __( 'Añadir Nueva Etiqueta' ),
    'new_item_name' => __( 'Nombre de Nueva Etiqueta' ),
    'separate_items_with_commas' => __( 'Separar etiquetas con comas' ),
    'add_or_remove_items' => __( 'Añadir o eliminar etiquetas' ),
    'choose_from_most_used' => __( 'Elegir de las etiquetas más usadas' ),
    'menu_name' => __( 'Etiquetas' ),
  ); 

  register_taxonomy('tag','portfolio',array(
    'hierarchical' => false,
    'labels' => $labels,
    'show_ui' => true,
    'update_count_callback' => '_update_post_term_count',
    'query_var' => true,
    'rewrite' => array( 'slug' => 'tag' ),
  ));
}
?>
19 ago 2012 02:07:03
Comentarios

@JoeBobby probablemente valdría la pena revisar la página del Codex de WordPress sobre el registro de taxonomías para tener una mejor idea de todas las opciones disponibles: http://codex.wordpress.org/Function_Reference/register_taxonomy

Stephen S. Stephen S.
8 may 2014 19:41:54

Solo una nota: esto está creando una taxonomía completamente nueva llamada 'tag' en lugar de añadir la taxonomía existente 'post_tag' al tipo de contenido personalizado.

Jake Jake
28 jun 2017 20:53:05

@chifliiiii cómo obtener estas etiquetas en la página individual de la entrada con enlaces a las etiquetas, cómo crear una plantilla para la página de etiquetas

Dinesh Dinesh
25 jun 2018 12:05:06

Estoy de acuerdo con Jake, siento que esto no resuelve el problema. La respuesta de @Marcus debería ser la marcada como aceptada.

Craig Wayne Craig Wayne
13 jul 2018 00:20:09

¿cómo acceder a la plantilla para esta taxonomía 'tag'? ¿Cuál es el nombre de la plantilla?

emir emir
8 jun 2021 11:04:17

Todavía me falta un cuadro de etiquetas en la pantalla de edición de CPT

Fanky Fanky
29 jul 2021 14:10:43

¡El cuadro de etiquetas en la pantalla de edición de administración apareció al agregar 'show_in_rest' => true, en los parámetros de register_taxonomy()! 8-o

Fanky Fanky
29 jul 2021 14:37:49
Mostrar los 2 comentarios restantes
0
10

Usa esto:

add_action( 'init', 'gp_register_taxonomia_para_tipo_de_objeto' );
function gp_register_taxonomia_para_tipo_de_objeto() {
    // Registrar la taxonomía 'post_tag' para el tipo de post 'portfolio'
    register_taxonomy_for_object_type( 'post_tag', 'portfolio' );
};
8 oct 2014 13:16:29
4

Método 1 (de las respuestas anteriores: https://wordpress.stackexchange.com/a/106211/38771)

Diferentes tipos de publicaciones utilizarán los mismos datos de "Etiquetas" del tipo de publicación predeterminado "post".

  • Ventajas

    • Todo (debería) funcionar de inmediato con una sola línea

    • Todas tus etiquetas en un solo lugar en el CMS

  • Desventajas

    • Olvídate de un CMS bien estructurado / fácil de usar: el listado de Etiquetas en la página de tipos de publicaciones personalizadas mostrará todas las etiquetas (no solo las etiquetas utilizadas en los artículos del tipo de publicación personalizada) con el conteo incorrecto...
    • Los cambios en una Etiqueta afectarán tanto a los artículos del tipo "post" predeterminado como a los artículos de tipos de publicaciones personalizadas (Eliminar una Etiqueta la borra en ambos tipos de artículos)
    • Más difícil (posiblemente imposible) configurar cualquier funcionalidad distinta de Etiquetas: diferentes descripciones, campos personalizados, imágenes, etc. (al menos no sin mucha codificación personalizada sobre el código central de Wordpress)...

Método 2 (de las respuestas anteriores: https://wordpress.stackexchange.com/a/62263/38771)

Diferentes tipos de publicaciones utilizan diferentes configuraciones / datos de "Etiquetas".

  • Ventajas

    • Crear funcionalidades relacionadas con etiquetas diferentes/claramente distintas: plantillas de frontend, capacidades, filtros de consulta, acciones)
    • Asignar diferentes datos relacionados con etiquetas: datos de campos o incluso campos personalizados
    • Gestionar las Etiquetas mejor en el CMS
      • Ejemplo: Editar/Eliminar una etiqueta de "post" no afectará a la etiqueta (con nombre/slug similar) de los otros tipos de publicaciones
  • Compensación

    Un poco más de código para configurar

En realidad, son una forma extremadamente poderosa de agrupar varios elementos de todo tipo de maneras. https://codex.wordpress.org/Taxonomies#Custom_Taxonomies

9 oct 2018 20:07:10
Comentarios

Aquí hay un caso para el Método 1: Un gran sitio web deportivo que cubre numerosos temas/ligas/deportes con etiquetas como "NBA", "NHL", "Basketball", "Olympics", "Steroids", "College", etc. No tiene ningún sentido duplicar y gestionar lo que podrían ser más de 100 etiquetas y 4 tipos de publicaciones (tipo de publicación por defecto y 3 tipos de publicaciones personalizados). En cuanto a los inconvenientes, si los datos de recuento de etiquetas son tan especiales, entonces se puede crear una vista personalizada para eso. En cuanto a etiquetas personalizadas similares por tipo de publicación, no parece haber una necesidad obvia hasta ahora (intentando pensar en una... necesito ejemplos).

Kalnode Kalnode
12 ene 2019 02:23:24

Sí, pero no habrá automáticamente diferentes enlaces permanentes de etiquetas para diferentes tipos de publicaciones. Una etiqueta "playoffs" tendrá "/tag/playoffs" para todos los tipos de publicaciones. Luego tienes que configurar reglas de reescritura o usar parámetros GET para crear diferentes enlaces permanentes... Con una taxonomía diferente para cada tipo de publicación, cada etiqueta "playoffs" para cada tipo de publicación tendrá su propio enlace permanente, que se puede personalizar usando la Jerarquía de Plantillas de Wordpress. Eso es bueno si las diferentes páginas de "playoffs" son distintas para NBA, NHL... Trabajé en un sitio con ese nivel de personalización para taxonomías (campos personalizados, imagen de taxonomía, descripción)

P-S P-S
14 ene 2019 15:53:08

Entiendo lo que dices. Entonces, si optamos por diferentes taxonomías de etiquetas por CPT, ¿qué tal si lo hacemos de manera que cuando agregas/editas un término en una taxonomía, se cambie en otras taxonomías, es decir, términos únicos sincronizados entre taxonomías? Por ejemplo, definir "Basketball" una vez, digamos en la taxonomía de etiquetas de Publicación, luego una vez que guardas, "Basketball" también se crea de manera única en otras taxonomías para CPT's. Así que introduces/editas una etiqueta una vez, y el cambio se refleja en múltiples taxonomías de etiquetas. Al final obtienes la gestión de etiquetas en un solo destino, además de una situación de enlace permanente más deseable.

Kalnode Kalnode
15 ene 2019 03:15:46

Sí, eso sería realmente un gran método si el sitio comparte la misma información básica de taxonomías (título) para múltiples CPT, además de ofrecer la opción de personalizar aún más estas taxonomías (campos personalizados, imágenes, etc.) para diferentes CPT. ¡Genial!

P-S P-S
18 ene 2019 13:44:19
1

Simplemente usa este código, puede que te ayude

 add_action( 'init', 'create_client_tax' );
function create_client_tax() {
    register_taxonomy( 
            'client_tag', //tu taxonomía de etiquetas
            'client',  // Tu tipo de entrada
            array( 
                'hierarchical'  => false, 
                'label'         => __( 'Etiquetas', CURRENT_THEME ), 
                'singular_name' => __( 'Etiqueta', CURRENT_THEME ), 
                'rewrite'       => true, 
                'query_var'     => true 
            )  
        );
}
6 mar 2018 20:26:19
Comentarios

Una versión simplificada de la respuesta ya aceptada. Además, esto también agrega una taxonomía completamente nueva en lugar de utilizar la taxonomía 'post_tag' existente.

acidrums4 acidrums4
11 jul 2018 20:36:04
0

Esto siempre funciona bien. ref: https://developer.wordpress.org/plugins/post-types/registering-custom-post-types/

/**
* Crear taxonomía de etiquetas para CPT portfolio
*/
if ( ! function_exists( 'ns_register_team_category' ) ) {
function ns_register_team_category() {

   $labels = array(
    'name' => __( 'Etiquetas', 'ns' ),
    'singular_name' => __( 'Etiqueta', 'ns' ),
    'search_items' =>  __( 'Buscar Etiquetas' ),
    'popular_items' => __( 'Etiquetas Populares' ),
    'all_items' => __( 'Todas las Etiquetas' ),
    'parent_item' => null,
    'parent_item_colon' => null,
    'edit_item' => __( 'Editar Etiqueta' ),
    'update_item' => __( 'Actualizar Etiqueta' ),
    'add_new_item' => __( 'Añadir Nueva Etiqueta' ),
    'new_item_name' => __( 'Nombre de Nueva Etiqueta' ),
    'separate_items_with_commas' => __( 'Separar etiquetas con comas' ),
    'add_or_remove_items' => __( 'Añadir o eliminar etiquetas' ),
    'choose_from_most_used' => __( 'Elegir entre las etiquetas más usadas' ),
    'menu_name' => __( 'Etiquetas' ),
   );

   $args = array(
    'label' => __( 'Etiqueta', 'ns' ),
    'labels' => $labels,
    'public' => true,
    'publicly_queryable' => true,
    'hierarchical' => true,
    'show_ui' => true,
    'show_in_menu' => true,
    'show_in_nav_menus' => true,
    'query_var' => true,
    'rewrite' => array( 'slug' => 'etiqueta', 'with_front' => false, ),
    'show_admin_column' => false,
    'show_in_rest' => true,
    'rest_base' => 'etiqueta',
    'rest_controller_class' => 'WP_REST_Terms_Controller',
    'show_in_quick_edit' => true,
    'update_count_callback' => '_update_post_term_count',
);
register_taxonomy( 'etiqueta', array( 'portfolio' ), $args );
}
add_action( 'init', 'ns_register_team_category', 0 );
}
28 ago 2020 14:12:42
1

Puedes simplemente añadir una taxonomía ya registrada a un tipo de objeto, mira el código a continuación.

 /**
 * Función para añadir selección de etiquetas al tipo de entrada personalizado
 */
 function ns_reg_tag() {
    register_taxonomy_for_object_type('post_tag', 'Custom_Post_Type');
 }
add_action('init', 'ns_reg_tag');
3 mar 2021 13:44:55
Comentarios

Esta es la mejor solución actualmente.

Marcio Duarte Marcio Duarte
6 abr 2022 03:21:12
0

Aunque la respuesta de Marcus resuelve la mayor parte del problema, ten en cuenta que no es una solución completa. La respuesta de chifliiiii es más completa pero, como se menciona en los comentarios, no reutiliza la taxonomía de etiquetas ya existente.

Según el OP, una solución debe usar "la taxonomía de etiquetas" y no "una taxonomía de etiquetas". Por eso considero que la respuesta de chifliiiii es incorrecta.

Por otro lado, creo que la respuesta de Marcus es parcialmente correcta, lo mismo ocurre con respuestas similares como la que publicó Giovanni Putignano. Explicaré a continuación por qué.


Una solución completa

Al registrar tu tipo de publicación personalizada en la taxonomía post_tag, ya sea usando el método que sugiere Marcus o Giovanni, no se mostrarán las publicaciones etiquetadas de tu tipo de publicación personalizada en la página de archivo de la etiqueta. Solo se mostrarán publicaciones del tipo de publicación post, porque la plantilla de etiquetas integrada se renderiza con una consulta que solo apunta al tipo de publicación post. Para solucionar esto, debes modificar la consulta con el hook pre_get_posts.

Esta es una forma genérica de resolverlo (no me preguntes por qué esto no está implementado en el núcleo):

add_action('pre_get_posts', function($query) {
  // Esto apuntará a las consultas utilizadas para generar la plantilla de archivo de etiquetas.
  // Puedes eliminar la condición `is_main_query()` si deseas obtener publicaciones
  // por etiqueta fuera del bucle.
  if (!is_admin() && is_tag() && $query->is_main_query()) {
    // Establecerá algo como: Array( 'post', 'portfolio' )
    $types = get_taxonomy('post_tag')->object_type;

    // Modifica la consulta para usar solo los tipos registrados en la
    // taxonomía `post_tag`.
    $query->set('post_type', $types);
  }
});
9 sept 2020 15:25:00
0

En mi caso, el siguiente código funcionó.

register_taxonomy( 'events_tag',array('events'),  array(
        'hierarchical' => false, 
        'label' => 'Etiqueta',
        'show_admin_column' => true, 
        'singular_label' => 'Etiqueta de tu tipo de entrada',
        'query_var'         => true,
        'rewrite' => array( 'slug' => 'events_tag' ),
        'show_in_rest'       => true,
        'rest_base'          => 'events_tag',
        'rest_controller_class' => 'WP_REST_Terms_Controller',  
        )
    );
22 oct 2022 14:15:03