Woocommerce: asignar un "autor" a un producto

27 nov 2012, 12:41:15
Vistas: 18.6K
Votos: 11

Estoy desarrollando mi primer tema para Woocommerce.

Necesito poder tener "autores" (en realidad "diseñadores") asignados a productos de Woocommerce. ¿Es eso factible? Estaba pensando en usar el usuario "autor" incorporado en WordPress, pero la interfaz de edición de un producto no proporciona el cuadro de "autor", a diferencia de la interfaz de edición de una "publicación".

0
Todas las respuestas a la pregunta 1
3
17

Simplemente usa add_post_type_support:

add_action('init', 'wpse_74054_add_author_woocommerce', 999 );

function wpse_74054_add_author_woocommerce() {
    add_post_type_support( 'product', 'author' );
}

Usuario asignado con un rol personalizado

rol de usuario


Autores habilitados en el tipo de entrada Productos

productos de WooCommerce con autor habilitado


Otra opción, de la cual no estoy seguro de su corrección, es engancharse a woocommerce_register_post_type* y registrar primero el tipo de entrada. Esta es una copia de la función original más las variables necesarias, con author añadido al argumento supports.

* /wp-content/plugins/woocommerce/woocommerce.php, línea 885

add_action( 'woocommerce_register_post_type', 'wpse_74054_override_register_product_type' );
function wpse_74054_override_register_product_type()
{
    $shop_page_id = woocommerce_get_page_id('shop');
    $base_slug = ( $shop_page_id > 0 && get_page( $shop_page_id ) ) ? get_page_uri( $shop_page_id ) : 'shop';
    $product_base = ( get_option('woocommerce_prepend_shop_page_to_products') == 'yes' ) ? trailingslashit($base_slug) : trailingslashit(_x('product', 'slug', 'woocommerce'));

    register_post_type( "product",
        array(
            'labels' => array(
                    'name'                  => __( 'Products', 'woocommerce' ),
                    'singular_name'         => __( 'Product', 'woocommerce' ),
                    'menu_name'             => _x( 'Products', 'Admin menu name', 'woocommerce' ),
                    'add_new'               => __( 'Add Product', 'woocommerce' ),
                    'add_new_item'          => __( 'Add New Product', 'woocommerce' ),
                    'edit'                  => __( 'Edit', 'woocommerce' ),
                    'edit_item'             => __( 'Edit Product', 'woocommerce' ),
                    'new_item'              => __( 'New Product', 'woocommerce' ),
                    'view'                  => __( 'View Product', 'woocommerce' ),
                    'view_item'             => __( 'View Product', 'woocommerce' ),
                    'search_items'          => __( 'Search Products', 'woocommerce' ),
                    'not_found'             => __( 'No Products found', 'woocommerce' ),
                    'not_found_in_trash'    => __( 'No Products found in trash', 'woocommerce' ),
                    'parent'                => __( 'Parent Product', 'woocommerce' )
                ),
            'description'           => __( 'This is where you can add new products to your store.', 'woocommerce' ),
            'public'                => true,
            'show_ui'               => true,
            'capability_type'       => 'post',
            'capabilities' => array(
                'publish_posts'         => 'manage_woocommerce_products',
                'edit_posts'            => 'manage_woocommerce_products',
                'edit_others_posts'     => 'manage_woocommerce_products',
                'delete_posts'          => 'manage_woocommerce_products',
                'delete_others_posts'   => 'manage_woocommerce_products',
                'read_private_posts'    => 'manage_woocommerce_products',
                'edit_post'             => 'manage_woocommerce_products',
                'delete_post'           => 'manage_woocommerce_products',
                'read_post'             => 'manage_woocommerce_products'
            ),
            'publicly_queryable'    => true,
            'exclude_from_search'   => false,
            'hierarchical'          => false, // ¡Jerárquico causa problemas de memoria - WP carga todos los registros!
            'rewrite'               => array( 'slug' => $product_base, 'with_front' => false, 'feeds' => $base_slug ),
            'query_var'             => true,
            'supports'              => array( 'title', 'editor', 'excerpt', 'thumbnail', 'comments', 'custom-fields', 'page-attributes', 'author' ),
            'has_archive'           => $base_slug,
            'show_in_nav_menus'     => true
        )
    );
}
29 nov 2012 16:04:34
Comentarios

El código más reciente de WooCommerce incluye filtros para cada tipo de publicación personalizada que se registra apply_filters( 'woocommerce_register_post_type_product', por lo que el filtrado es una solución válida.

Anagio Anagio
20 ene 2014 12:05:12

¿Qué significa el 999 en el método add_action()?

Atul Chavan Atul Chavan
29 ene 2019 16:50:43

@Atul, esa es la prioridad para que se ejecute la acción

brasofilo brasofilo
29 ene 2019 18:33:05