Agregar subtítulos al título del producto Woocommerce

8

Estoy usando WooCommerce en un sitio creado con Pagelines Framework. Necesito que aparezca un campo de subtítulos / personalizable debajo del nombre del producto en cualquier lugar que aparezca en el sitio. Tal como están las cosas, WooCommerce no ofrece esa opción.

Intenté usar campos personalizados, pero WooCommerce también los usa y genera un montón de cosas que no quiero junto con mi subtítulo. Si tuviera que nombrar mi campo personalizado "autor de libros", ¿este código funcionaría para mostrar solo el campo personalizado que deseo?

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

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

He encontrado los ganchos que necesito en este archivo php (creo que no sé php, por eso te 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?

Agradecimiento eterno a cualquiera que pueda ayudar.

loulousantaana
fuente

Respuestas:

5

Para responder a su primera pregunta, hacer que su post meta»autor de libros« de esta manera haga eco / muestre exactamente eso. Si está definiendo la variable $iden su código a la derecha, o puede hacerlo como se muestra a continuación.

El código debe responder a su segunda pregunta, cómo insertar su segunda línea de título en la página del producto a través del gancho woocommerce_single_product_summary. Simplemente agregue su información adicional de esta manera:

    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 su metaetiquetado personalizado, puede hacer lo que @ pl4g4 y @brasofilo sugirieron y agregar un metabox a la pantalla de edición del producto, pero no es necesario, por supuesto, parece saber cómo hacerlo con la costumbre estándar de wordpress campos metabox .


Puede agregar su meta box de esta manera, el código se basa en el primer ejemplo en la página de codex de wordpress add_meta_box .

/**
 * Adds a box to the main column on the Post and Page edit screens.
 */
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 );

/**
 * Prints the box content.
 * 
 * @param WP_Post $post The object for the current post/page.
 */
function wpse116660_wc_2nd_title_inner_mb( $post ) {

  // Add an nonce field so we can check for it later.
  wp_nonce_field( 'wc_2nd_title_inner_mb', 'wc_2nd_title_inner_mb_nonce' );

  /*
   * Use get_post_meta() to retrieve an existing value
   * from the database and use the value for the form.
   */
  $value = get_post_meta( $post->ID, 'bookauthor', true );

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

}

/**
 * When the post is saved, saves our custom data.
 *
 * @param int $post_id The ID of the post being saved.
 */
function wpse116660_wc_2nd_title_save_postdata( $post_id ) {

  /*
   * We need to verify this came from the our screen and with proper authorization,
   * because save_post can be triggered at other times.
   */

  // Check if our nonce is set.
  if ( ! isset( $_POST['wc_2nd_title_inner_mb_nonce'] ) )
    return $post_id;

  $nonce = $_POST['wc_2nd_title_inner_mb_nonce'];

  // Verify that the nonce is valid.
  if ( ! wp_verify_nonce( $nonce, 'wc_2nd_title_inner_mb' ) )
      return $post_id;

  // If this is an autosave, our form has not been submitted, so we don't want to do anything.
  if ( defined( 'DOING_AUTOSAVE' ) && DOING_AUTOSAVE ) 
      return $post_id;

  // Check the user's permissions.
  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, its safe for us to save the data now. */

  // Sanitize user input.
  $mydata = sanitize_text_field( $_POST['bookauthor_field'] );

  // Update the meta field in the database.
  update_post_meta( $post_id, 'bookauthor', $mydata );
}
add_action( 'save_post', 'wpse116660_wc_2nd_title_save_postdata' );
Nicolai
fuente
1
+1. El add_actioncon una prioridad de 6 que lo pondrá a la derecha del subtítulo después del título regular (que tiene una prioridad de 5). En caso de que el OP no quiera agregar su propia metabox, ya he escrito un complemento de subtítulos que guarda los datos.
helgatheviking
3

Puede agregar un metabox adicional a la publicación del producto. Este meta cuadro debe tener un formulario de entrada para que pueda ingresar el subtítulo, cuando haya agregado el metabox guarde el valor en post_meta cuando se guarde el producto, luego en la página de un solo producto de la plantilla de woocommerce use el código

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

para conseguirlo.

puedes encontrar información sobre metaboxess aquí y también aquí

pl4g4
fuente
O use Campos personalizados avanzados o busque en nuestros archivos .
brasofilo
+1, pero no publique enlaces a fuentes externas. Si necesita hacerlo, entonces también invoque lo que está escrito (código) en el destino.
Kaiser