Agregar subtítulo al título del producto en Woocommerce

3 oct 2013, 20:07:16
Vistas: 28.6K
Votos: 8

Estoy usando WooCommerce en un sitio construido con Pagelines Framework. Necesito tener un subtítulo/campo personalizable que aparezca debajo del nombre del producto en cualquier lugar del sitio. Por defecto, WooCommerce no ofrece esta opción.

He intentado usar campos personalizados pero WooCommerce también los usa y muestra una serie de elementos que no quiero junto con mi subtítulo. Si nombro mi campo personalizado "bookauthor", ¿funcionaría este código para mostrar solo el campo personalizado que quiero?

<?php echo get_post_meta($id, "bookauthor", true); ?>

Y si es así, ¿cómo hago que mi nuevo campo se muestre justo después del título del producto en el front-end?

He encontrado los hooks que necesito en este archivo php (creo, no sé php, por eso les pregunto):

<?php 
/*
  * @hooked woocommerce_template_single_title - 5
  * @hooked woocommerce_template_single_price - 10
  * @hooked woocommerce_template_single_excerpt - 20
  * @hooked woocommerce_template_single_add_to_cart - 30
  * @hooked woocommerce_template_single_meta - 40
  * @hooked woocommerce_template_single_sharing - 50
*/
?>

Sé cómo filtrar pero, ¿cómo agrego el campo personalizado a esa lista?

¿O hay una forma completamente diferente de lograr lo que necesito?

Eterna gratitud a quien pueda ayudar.

0
Todas las respuestas a la pregunta 2
1

Para responder a tu primera pregunta, obtener tu post meta »bookauthor« de esta manera hará que se muestre/eco solo eso. Si estás definiendo la variable $id correctamente en tu código - o puedes hacerlo como se muestra a continuación.

El código debería responder a tu segunda pregunta, sobre cómo insertar tu segunda línea de título en la página del producto mediante el hook woocommerce_single_product_summary. Solo añade tu información extra así:

    function wpse116660_wc_add_2nd_title() {
        ?>
        <div class="2nd-tile">
            <?php echo get_post_meta(get_the_ID(), "bookauthor", true); ?>
        </div>
        <?php
    }
    add_action( 'woocommerce_single_product_summary', 'wpse116660_wc_add_2nd_title', 6 );

Para tener un poco más de comodidad con tus metadatos personalizados, puedes hacer lo que sugirieron @pl4g4 y @brasofilo y añadir un metabox a la pantalla de edición del producto, pero no es necesario por supuesto, parece que sabes cómo hacerlo con el metabox estándar de campos personalizados de WordPress.


Puedes añadir tu metabox así, el código está basado en el primer ejemplo de la página del codex de WordPress sobre add_meta_box.

/**
 * Añade un cuadro a la columna principal en las pantallas de edición de Entrada y Página.
 */
function wpse116660_wc_2nd_title_mb() {

    $screen = array( 'product' );

        add_meta_box(
            'wc_2nd_title_mb',
            __( '2nd title', 'your_textdomain' ),
            'wc_2nd_title_inner_mb',
            $screen,
            'advanced',
            'high'
        );
}
add_action( 'add_meta_boxes', 'wpse116660_wc_2nd_title_mb', 0 );

/**
 * Imprime el contenido del cuadro.
 * 
 * @param WP_Post $post El objeto para la entrada/página actual.
 */
function wpse116660_wc_2nd_title_inner_mb( $post ) {

  // Añade un campo nonce para que podamos verificarlo más tarde.
  wp_nonce_field( 'wc_2nd_title_inner_mb', 'wc_2nd_title_inner_mb_nonce' );

  /*
   * Usa get_post_meta() para recuperar un valor existente
   * de la base de datos y usa el valor para el formulario.
   */
  $value = get_post_meta( $post->ID, 'bookauthor', true );

  echo '<label for="bookauthor_field">';
       _e( "Autor del libro", 'your_textdomain' );
  echo '</label> ';
  echo '<input type="text" id="bookauthor_field" name="bookauthor_field" value="' . esc_attr( $value ) . '" size="50" />';

}

/**
 * Cuando se guarda la entrada, guarda nuestros datos personalizados.
 *
 * @param int $post_id El ID de la entrada que se está guardando.
 */
function wpse116660_wc_2nd_title_save_postdata( $post_id ) {

  /*
   * Necesitamos verificar que esto proviene de nuestra pantalla y con la autorización adecuada,
   * porque save_post puede activarse en otros momentos.
   */

  // Comprueba si nuestro nonce está establecido.
  if ( ! isset( $_POST['wc_2nd_title_inner_mb_nonce'] ) )
    return $post_id;

  $nonce = $_POST['wc_2nd_title_inner_mb_nonce'];

  // Verifica que el nonce es válido.
  if ( ! wp_verify_nonce( $nonce, 'wc_2nd_title_inner_mb' ) )
      return $post_id;

  // Si es un autoguardado, nuestro formulario no se ha enviado, así que no queremos hacer nada.
  if ( defined( 'DOING_AUTOSAVE' ) && DOING_AUTOSAVE ) 
      return $post_id;

  // Comprueba los permisos del usuario.
  if ( 'page' == $_POST['post_type'] ) {

    if ( ! current_user_can( 'edit_page', $post_id ) )
        return $post_id;

  } else {

    if ( ! current_user_can( 'edit_post', $post_id ) )
        return $post_id;
  }

  /* OK, es seguro para nosotros guardar los datos ahora. */

  // Sanitiza la entrada del usuario.
  $mydata = sanitize_text_field( $_POST['bookauthor_field'] );

  // Actualiza el campo meta en la base de datos.
  update_post_meta( $post_id, 'bookauthor', $mydata );
}
add_action( 'save_post', 'wpse116660_wc_2nd_title_save_postdata' );
4 oct 2013 00:32:26
Comentarios

+1. El add_action con una prioridad de 6 es lo que colocará el subtítulo justo después del título regular (que tiene una prioridad de 5). En caso de que el OP no quiera agregar su propio metabox, ya he escrito un plugin de subtítulos que guarda los datos.

helgatheviking helgatheviking
4 oct 2013 13:48:10
2

Puedes agregar un metabox adicional a la publicación de producto. Este metabox debe tener un formulario de entrada para que puedas introducir el subtítulo. Cuando hayas añadido el metabox, guarda el valor en el post_meta cuando el producto sea guardado. Luego, en la página de producto individual desde la plantilla de WooCommerce, usa el código:

<?php echo get_post_meta($id, "bookauthor", true); ?>

para obtenerlo.

Puedes encontrar información sobre metaboxes aquí y también aquí.

3 oct 2013 23:20:55
Comentarios

O utiliza Advanced Custom Fields o busca en nuestros archivos.

brasofilo brasofilo
3 oct 2013 23:38:19

+1, pero por favor no publiques enlaces a fuentes externas. Si necesitas hacerlo, por favor también resume lo que está escrito (código) en el destino.

kaiser kaiser
4 oct 2013 01:16:48