Añadir etiquetas a un tipo de entrada personalizado

9 sept 2014, 14:45:42
Vistas: 16.4K
Votos: 1

Estoy utilizando el framework Cherry en un sitio WordPress. Viene con un tipo de entrada personalizado que se puede usar para agregar 'Miembros del equipo' y crear páginas de personal, etc.

Necesito expandir esto para poder agregar etiquetas a cada 'miembro del equipo' y así poder etiquetarlos según el departamento donde trabajan (a / b / c / etc.).

El tipo de entrada personalizado está registrado en el archivo theme-init.php usando este código:

/* Nuestro Equipo */
function my_post_type_team() {
register_post_type( 'team',
    array(
        'label'               => theme_locals("our_team"),
        'singular_label'      => theme_locals("our_team"),
        '_builtin'            => false,
        // 'exclude_from_search' => true, // Excluir de los resultados de búsqueda
        'capability_type'     => 'page',
        'public'              => true,
        'show_ui'             => true,
        'show_in_nav_menus'   => false,
        'menu_position'       => 5,
        'menu_icon'           => ( version_compare( $GLOBALS['wp_version'], '3.8', '>=' ) ) ? 'dashicons-businessman' : '',
        'rewrite'             => array(
                                    'slug'       => 'team-view',
                                    'with_front' => FALSE,
                                ),
        'supports' => array(
                        'title',
                        'editor',
                    'thumbnail',
                    )
    )
);
}
add_action('init', 'my_post_type_team');

Quiero agregar etiquetas a esto, para que cuando agregue un nuevo miembro del equipo, también pueda asignarlo a un departamento mediante etiquetas. Actualmente el cuadro de edición de etiquetas no aparece en la página de agregar/editar.

Entonces, adapté el código anterior para incluir un registro de taxonomía así:

/* Nuestro Equipo */
function my_post_type_team() {
register_post_type( 'team',
    array(
        'label'               => theme_locals("our_team"),
        'singular_label'      => theme_locals("our_team"),
        '_builtin'            => false,
        // 'exclude_from_search' => true, // Excluir de los resultados de búsqueda
        'capability_type'     => 'page',
        'public'              => true,
        'show_ui'             => true,
        'show_in_nav_menus'   => false,
        'menu_position'       => 5,
        'menu_icon'           => ( version_compare( $GLOBALS['wp_version'], '3.8', '>=' ) ) ? 'dashicons-businessman' : '',
        'rewrite'             => array(
                                    'slug'       => 'team-view',
                                    'with_front' => FALSE,
                                ),
        'supports' => array(
                        'title',
                        'editor',
                    'thumbnail',
                    )
    )
);
register_taxonomy(
    'team_tag',
    'team',
    array(
        'hierarchical'  => false,
        'label'         => theme_locals("tags"),
        'singular_name' => theme_locals("tag"),
        'rewrite'       => true,
        'query_var'     => true
    )
);
}
add_action('init', 'my_post_type_team');

Sin embargo, todavía no aparece el cuadro de etiquetas en la página de edición en el administrador.

Cualquier ayuda con esto será muy apreciada.

2
Comentarios

¿Cuál es la función de estos theme_locals

Pieter Goosen Pieter Goosen
9 sept 2014 15:40:50

@PieterGoosen No tengo idea, para ser honesto. Deben ser parte del framework (cherry framework).

Phill Healey Phill Healey
9 sept 2014 16:35:02
Todas las respuestas a la pregunta 6
0

Parece que el problema se debía en parte a la existencia de un archivo theme-init.php en el tema hijo que estaba sobrescribiendo partes del theme-init.php en el tema padre / framework Cherry.

Resolví el problema añadiendo el siguiente código en el theme-init.php de mi tema hijo:

register_taxonomy('team_tag', 'team', array(
    'hierarchical' => false, 
    'label' => theme_locals("tags"), 
    'singular_name' => theme_locals("tag"), 
    'rewrite' => true, 
    'query_var' => true
    )
);
9 sept 2014 16:33:44
4
register_post_type( 'team',
    array(
        'label'               => theme_locals("our_team"),
        'singular_label'      => theme_locals("our_team"),
        '_builtin'            => false,
        // 'exclude_from_search' => true, // Excluir de los resultados de búsqueda
        'capability_type'     => 'page',
        'public'              => true,
        'show_ui'             => true,
        'show_in_nav_menus'   => false,
        'menu_position'       => 5,
        'menu_icon'           => ( version_compare( $GLOBALS['wp_version'], '3.8', '>=' ) ) ? 'dashicons-businessman' : '',
        'rewrite'             => array(
                                    'slug'       => 'team-view',
                                    'with_front' => FALSE,
                                ),
        'supports' => array(
                        'title',
                        'editor',
                    'thumbnail',
                    ),
        'taxonomies' => array('team_tag')
    )
);

Puedes ver que he añadido el parámetro taxonomies a la función register_post_type.

Aunque este código debería funcionar, podrías intentar crear la relación más tarde, con esto:

add_action('init', 'add_tax_post_rel');

function add_tax_post_rel() {
    register_taxonomy_for_object_type('team_tag', 'team', 11);
}
9 sept 2014 14:59:26
Comentarios

Gracias por la respuesta, pero eso no hace nada. Si cambio 'team_tag' por 'tag' y luego añado 'tags' al array de soporte, obtengo el cuadro de etiquetas en el submenú y en la página del editor. Sin embargo, esto utiliza las etiquetas globales del sitio.

Phill Healey Phill Healey
9 sept 2014 15:26:05

@PhillHealey no puede ser, las etiquetas integradas están bajo la taxonomía post_tag, no tag

Pieter Goosen Pieter Goosen
9 sept 2014 15:42:16

@PhillHealey, he añadido una forma alternativa de crear la relación.

Tomás Cot Tomás Cot
9 sept 2014 15:57:54

@PieterGoosen Ok, utiliza las mismas etiquetas que otro tipo de entrada personalizada.

Phill Healey Phill Healey
9 sept 2014 16:18:24
2

prueba esto

register_taxonomy(
        'team_tag', 
        'team', 
        array( 
            'hierarchical'  => false, 
            'label'         => __( 'Etiquetas', CURRENT_THEME ), 
            'singular_name' => __( 'Etiqueta', CURRENT_THEME ), 
            'rewrite'       => true, 
            'query_var'     => true 
        )  
    );
1 dic 2015 09:01:40
Comentarios

Por favor, agrega respuestas adecuadas, es decir, si agregas código, explica qué hace tu código y cómo funciona. Gracias

Pieter Goosen Pieter Goosen
1 dic 2015 10:49:47

Esto sí tiene un código casi idéntico sin una definición de función opaca a la que los usuarios no tienen acceso. En muchos sentidos, este debería ser el código utilizado en la respuesta aceptada ya que se aplica a todo WP, no solo al framework Cherry si no hay comentarios en el código o definición de función. Incluso provocó una pregunta de tu parte.

MrMesees MrMesees
13 jun 2017 15:03:07
0

Puedes probar esto:

add_action( 'init', 'create_client_tax' );
function create_client_tax() {
    register_taxonomy( 
            'client_tag', //tu taxonomía de etiquetas
            'client',  // Tu tipo de post
            array( 
                'hierarchical'  => false, 
                'label'         => __( 'Etiquetas', CURRENT_THEME ), 
                'singular_name' => __( 'Etiqueta', CURRENT_THEME ), 
                'rewrite'       => true, 
                'query_var'     => true 
            )  
        );
}

Quizás esto te ayude

6 mar 2018 20:22:17
0

También me faltaba el cuadro de etiquetas en la pantalla de edición de CPT en el administrador. Apareció al añadir 'show_in_rest' => true, en los parámetros de register_taxonomy().

29 jul 2021 14:35:31
0

Si necesitas mostrar etiquetas (tags) para un tipo de publicación personalizada (custom post type), aquí tienes un buen ejemplo https://jamper.online/vyvod-tegov-tags-dlya-kastomnyh-postov-custom-post-type

    function get_terms_by_custom_post_type( $post_type, $taxonomy ){
    $args = array( 'post_type' => $post_type);
    $loop = new WP_Query( $args );
    $postids = array();
    // construye un array con los IDs de las publicaciones
    while ( $loop->have_posts() ) : $loop->the_post();
        array_push($postids, get_the_ID());
    endwhile;
    // obtiene los valores de la taxonomía basados en el array de IDs
    $taxonomies = wp_get_object_terms( $postids,  $taxonomy );
    wp_reset_postdata();
    return $taxonomies;
}
15 sept 2023 12:55:41