Agregar unidad de medida después del precio en WooCommerce. Ejemplo $24 /m2 y $24 /m

19 jun 2013, 12:43:48
Vistas: 19.5K
Votos: 4

Hola chicos,

Estoy intentando configurar el precio por unidad en mi WooCommerce. Algunos de los productos que vendo son baldosas para piso, y como tales se venden por metro cuadrado.

He añadido el siguiente código para mostrar /m2 después de cada precio

.amount:after{
    content: "/m2";
    text-size: 13px;
}

Esto agrega el /m2 después de cada precio.

Sin embargo, algunos de los artículos que vendo actualmente no son baldosas. Por ejemplo, las molduras decorativas se venden por metro lineal. Y también vendo bloques para columnas, que se venden por pieza. ¿Cómo puedo agregar las unidades de precio correctamente?

¿El CSS de WooCommerce reconoce SKU? Y de ser así, ¿cómo implementarlo?

0
Todas las respuestas a la pregunta 2
1

En primer lugar, hacer esto con CSS en mi opinión definitivamente no es el camino a seguir.

En segundo lugar, pagar 129$ por una extensión solo para tener esta funcionalidad menor sería ridículo - nada en contra del plugin en sí.

En tercer lugar, la solución básica que se describe a continuación se basa en el ejemplo de la página codex de add_meta_box. Hay varias otras soluciones para lograr esto, solo hay que buscar un poco, esto es para que comiences.

Código:


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

    $screens = array( 'post', 'page', 'product' );

    foreach ( $screens as $screen ) {

        add_meta_box(
            'wc_price_per_unit_mb',
            __( 'Precio por Unidad', 'myplugin_textdomain' ),
            'wpse103469_wc_price_per_unit_inner_mb',
            $screen,
            'advanced',
            'high'
        );
    }
}
add_action( 'add_meta_boxes', 'wpse103469_wc_price_per_unit_mb' );

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

  // Añade un campo nonce para que podamos verificarlo más tarde.
  wp_nonce_field( 'wpse103469_wc_price_per_unit_inner_mb', 'wpse103469_wc_price_per_unit_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, 'wc_price_per_unit_key', true );

  echo '<label for="wc_price_per_unit_field">';
       _e( "Precio por Unidad", 'myplugin_textdomain' );
  echo '</label> ';
  echo '<input type="text" id="wc_price_per_unit_field" name="wc_price_per_unit_field" value="' . esc_attr( $value ) . '" size="25" />';

}

/**
 * Cuando se guarda la entrada, guarda nuestros datos personalizados.
 *
 * @param int $post_id El ID de la entrada que se está guardando.
 */
function wpse103469_wc_price_per_unit_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.
   */

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

  $nonce = $_POST['wpse103469_wc_price_per_unit_inner_mb_nonce'];

  // Verifica que el nonce es válido.
  if ( ! wp_verify_nonce( $nonce, 'wpse103469_wc_price_per_unit_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;

  // Verifica 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.
  $price_per_unit = sanitize_text_field( $_POST['wc_price_per_unit_field'] );

  // Actualiza el campo meta en la base de datos.
  update_post_meta( $post_id, 'wc_price_per_unit_key', $price_per_unit );
}
add_action( 'save_post', 'wpse103469_wc_price_per_unit_save_postdata' );


El campo meta »Precio por Unidad« puede mostrarse así:

echo get_post_meta(get_the_ID(), 'wc_price_per_unit_key', true); 

en el archivo de plantilla correspondiente.

Para añadir la información del campo meta »Precio por Unidad« directamente al precio mostrado puedes hacer algo como esto:

add_filter('woocommerce_get_price_html','wpse103469_add_price_per_unit_meta_to_price');
function wpse103469_add_price_per_unit_meta_to_price( $price ) {
    $price .= ' ' . get_post_meta(get_the_ID(), 'wc_price_per_unit_key', true);
    return $price;
}
1 dic 2013 19:10:26
Comentarios

¿Podré obtener la unidad cuando llame al método de WooCommerce para obtener el precio?

melvin melvin
24 ago 2018 08:01:22
2

Primero responderé a tu pregunta como la estabas abordando y luego te daré mi respuesta sobre cómo creo que debería hacerse.

CSS

Puedes hacer esto con CSS de un par de formas diferentes:

1) Puedes apuntar a cualquier página de producto:

.single-product .amount:after{
    content: "/m2";
    text-size: 13px;
}

2) Puedes apuntar a un producto específico usando su ID de producto:

.postid-XXXX .amount:after{
    content: "/m2";
    text-size: 13px;
}

3) Puedes apuntar a una categoría específica usando su ID de categoría:

.term-XXXX .amount:after{
    content: "/m2";
    text-size: 13px;
}

Measurement Price Calculator

Por supuesto, podrías usar la extensión Measurement Price Calculator para WooCommerce. Esta hace gran parte de lo que necesitas y añade elementos de interfaz geniales. Probablemente esta sería la forma en que yo lo haría.

20 jun 2013 01:33:45
Comentarios

¿Podrías aclarar tu afiliación con la extensión que estás sugiriendo?

Nicolai Grossherr Nicolai Grossherr
1 dic 2013 19:11:34

@ialocin Trabajo para WooThemes pero mi respuesta es personal.

BFTrick BFTrick
2 dic 2013 02:12:13