Cómo añadir una pestaña visible solo en el área de administración de productos en WooCommerce

5 abr 2016, 07:41:26
Vistas: 13.6K
Votos: 9

Imagen ilustrativa de pestañas en WooCommerce

Soy nuevo en desarrollo de WordPress. Quiero añadir configuraciones en la página de producto mediante una nueva pestaña.

¿Cómo puedo añadir estas configuraciones?

Código que intenté para añadir la pestaña:

// Añadir enlace de pestaña de producto en el admin
add_action('woocommerce_product_write_panel_tabs', array($this, 'woocommerce_product_write_panel_tabs'));
// Añadir contenido de pestaña de producto en el admin
add_action('woocommerce_product_write_panels', array($this, 'woocommerce_product_write_panels'));

/**
 * woocommerce_product_write_panel_tabs
 * Usado para añadir una pestaña personalizada a la pantalla de edición de producto
 * @return void
 */
function woocommerce_product_write_panel_tabs(){
    ?>
    <li class="custom_tab">
        <a href="#custom_tab_data_ctabs">
            <?php _e('Pestañas Customstock', 'GWP'); ?>
        </a>
    </li>
    <?php
}

/**
 * woocommerce_product_write_panels
 * Usado para mostrar el contenido de la pestaña personalizada (campos) en la pantalla de edición de producto
 * @return void
 */
function woocommerce_product_write_panels() {
    global $post,$woocommerce;
    $fields = array(
        array(
            'key'   => 'custom_tabs_ids',
            'label' => __('Seleccionar Pestañas Personalizadas', 'GWP'),
            'desc'  => __('Comienza a escribir el nombre de la Pestaña Personalizada, usado para incluir pestañas personalizadas.', 'GWP')
        ),
        array(
            'key'   => 'exclude_custom_tabs_ids',
            'label' => __('Seleccionar Pestañas Globales para excluir', 'GWP'),
            'desc'  => __('Comienza a escribir el nombre de la Pestaña Personalizada. Usado para excluir pestañas globales.', 'GWP')
        ),
        array(
            'key'   => 'id',
            'label' => __('Seleccionar Pestañas Globales para excluir', 'GWP'),
            'desc'  => __('Comienza a escribir el nombre de la Pestaña Personalizada. Usado para excluir pestañas globales.', 'GWP')
        )
    );

}

2
Comentarios

¿Probaste con la documentación de WooCommerce?

Sumit Sumit
5 abr 2016 08:37:44

@Dipika: Has usado filtros y acciones incorrectos, revisa mi respuesta. He probado mi código en mi sistema local.

Mehul Gohil Mehul Gohil
5 abr 2016 08:54:52
Todas las respuestas a la pregunta 1
2
13

He trabajado en tu problema y encontré una solución después de buscar en Google.

Nota: Añade el siguiente código al archivo functions.php de tu tema o a cualquier archivo de un plugin.

Código:

Esta función de filtro añadirá una pestaña personalizada al metabox Datos del Producto

<?php  
add_filter( 'woocommerce_product_data_tabs', 'add_my_custom_product_data_tab' , 99 , 1 );
function add_my_custom_product_data_tab( $product_data_tabs ) {
    $product_data_tabs['my-custom-tab'] = array(
        'label' => __( 'Mi Pestaña Personalizada', 'my_text_domain' ),
        'target' => 'my_custom_product_data',
    );
    return $product_data_tabs;
}

Esta acción añadirá campos personalizados a las pestañas personalizadas agregadas bajo el metabox Datos del Producto

add_action( 'woocommerce_product_data_panels', 'add_my_custom_product_data_fields' );
function add_my_custom_product_data_fields() {
    global $woocommerce, $post;
    ?>
    <!-- el id a continuación debe coincidir con el target registrado en la función add_my_custom_product_data_tab anterior -->
    <div id="my_custom_product_data" class="panel woocommerce_options_panel">
        <?php
        woocommerce_wp_checkbox( array( 
            'id'            => '_my_custom_field', 
            'wrapper_class' => 'show_if_simple', 
            'label'         => __( 'Etiqueta de Mi Campo Personalizado', 'my_text_domain' ),
            'description'   => __( 'Descripción de Mi Campo Personalizado', 'my_text_domain' ),
            'default'       => '0',
            'desc_tip'      => false,
        ) );
        ?>
    </div>
    <?php
}
?>

Guardar los datos de los campos personalizados de la pestaña de productos:

add_action( 'woocommerce_process_product_meta', 'woocommerce_process_product_meta_fields_save' );
function woocommerce_process_product_meta_fields_save( $post_id ){
    // Este es el caso para guardar los datos del campo personalizado de tipo checkbox. Debes hacerlo según tus campos personalizados
    $woo_checkbox = isset( $_POST['_my_custom_field'] ) ? 'yes' : 'no';
    update_post_meta( $post_id, '_my_custom_field', $woo_checkbox );
}

¡Espero que esto te ayude!

5 abr 2016 08:48:12
Comentarios

Si quiero guardar el contenido de un valor de campo personalizado en la base de datos, ¿cómo puedo almacenarlo?

Dipika Dipika
5 abr 2016 15:27:05

@Dipika: Por favor, encuentra mi respuesta actualizada en mi publicación de respuesta anterior.

Mehul Gohil Mehul Gohil
5 abr 2016 15:38:11